使用遞歸方法在C++中找到鍊錶倒數第n個節點
給定一個單鍊錶和正整數 N 作為輸入。目標是使用遞歸找到給定清單中從末尾算起的第 N 個節點。如果輸入清單有節點 a → b → c → d → e → f 且 N 為 4,則倒數第 4 節點將是 c。
我們將首先遍歷直到列表中的最後一個節點以及從遞歸(回溯)增量計數返回。當 count 等於 N 時,則傳回指向目前節點的指標作為結果。
讓我們看看此的各種輸入輸出場景-
輸入- List : - 1 → 5 → 7 → 12 → 2 → 96 → 33 N= 3
輸出− 倒數第N 個節點為:2
#解釋− 第三個節點是2。
輸入− 列表:- 12 → 53 → 8 → 19 → 20 →96 → 33 N=8 p>
#輸出- 節點不存在。
說明 - 清單只有7 個節點,因此不可能有倒數第8 個節點.
下面的程式中使用的方法如下
在這種方法中,我們將首先使用遞歸到達列表的末尾,在回溯時我們將增加一個靜態計數變數。一旦 count 等於輸入 N,就傳回目前節點指標。
-
採用帶有 int 資料部分的結構 Node,並將 Node 作為下一個指標。
採用結構 Node 和 int 資料部分。 p>
函數addtohead(Node** head, int data)用於向頭部新增節點,建立單向鍊錶。
- 使用上面的函數建立單向鍊錶,頭作為指向第一個節點的指標。
函數display(Node* head)用來列印從頭開始的鍊錶
取 N 為正整數。
函數 findNode(Node* head, int n1) 取得指向head 和 n1,當找到倒數第 n1 個節點時列印結果。
將blast當作指向倒數第 n1 個節點的指標。
呼叫 searchNthLast(head, n1, &nlast) 來找出該節點。
函數searchNthLast(Node* head, int n1, Node** nlast) 傳回指向鍊錶中從末尾算起第n1 個最後一個節點的指針,頭為第一個節點。
採用靜態計數變數。
- 如果 head 為 NULL,則不傳回任何內容。
取 tmp=head->next。
呼叫 searchNthLast(tmp, n1, nlast) 遞歸遍歷直到最後一個節點。
之後 count 加 1。
如果 count 變成等於n1則設定*nlast=head。
最後列印nlast所指向的節點的值作為結果。
範例
#include <bits/stdc++.h> using namespace std; struct Node { int data; Node* next; }; void addtohead(Node** head, int data){ Node* nodex = new Node; nodex->data = data; nodex->next = (*head); (*head) = nodex; } void searchNthLast(Node* head, int n1, Node** nlast){ static int count=0; if (head==NULL){ return; } Node* tmp=head->next; searchNthLast(tmp, n1, nlast); count = count + 1; if (count == n1){ *nlast = head; } } void findNode(Node* head, int n1){ Node* nlast = NULL; searchNthLast(head, n1, &nlast); if (nlast == NULL){ cout << "Node does not exists"; } else{ cout << "Nth Node from the last is: "<< nlast->data; } } void display(Node* head){ Node* curr = head; if (curr != NULL){ cout<<curr->data<<" "; display(curr->next); } } int main(){ Node* head = NULL; addtohead(&head, 20); addtohead(&head, 12); addtohead(&head, 15); addtohead(&head, 8); addtohead(&head, 10); addtohead(&head, 4); addtohead(&head, 5); int N = 2; cout<<"Linked list is :"<<endl; display(head); cout<<endl; findNode(head, N); return 0; }
登入後複製輸出
如果我們執行上面的程式碼,它將產生以下輸出
#Linked list is : 5 4 10 8 15 12 20 Nth Node from the last is: 12
登入後複製
以上是使用遞歸方法在C++中找到鍊錶倒數第n個節點的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

給定一個單鍊錶和正整數N作為輸入。目標是使用遞歸找到給定列表中從末尾算起的第N個節點。如果輸入清單有節點a→b→c→d→e→f且N為4,那麼倒數第4個節點將會是c。我們將首先遍歷直到列表中的最後一個節點以及從遞歸(回溯)增量計數返回。當count等於N時,則傳回指向目前節點的指標作為結果。讓我們來看看此的各種輸入輸出場景-輸入-List:-1→5→7→12→2→96→33N=3輸出−倒數第N個節點為:2解釋−第三個節點是2 。輸入−列表:-12→53→8→19→20→96→33N=8輸出-節點不存

PHPSPL資料結構庫概述PHPSPL(標準php庫)資料結構庫包含一組類別和接口,用於儲存和操作各種資料結構。這些資料結構包括數組、鍊錶、堆疊、佇列和集合,每個資料結構都提供了一組特定的方法和屬性,用於操縱資料。數組在PHP中,數組是儲存一系列元素的有序集合。 SPL數組類別提供了對原生的PHP數組進行加強的功能,包括排序、過濾和映射。以下是使用SPL陣列類別的範例:useSplArrayObject;$array=newArrayObject(["foo","bar","baz"]);$array

陣列與鍊錶的演算法時間複雜度比較:存取陣列O(1),鍊錶O(n);插入陣列O(1),鍊錶O(1)/O(n);刪除陣列O(1),鍊錶O (n);搜尋數組O(n),鍊錶O(n)。

數字的鍊錶表示是這樣提供的:鍊錶的所有節點都被視為數字的一位數字。節點儲存數字,使得鍊錶的第一個元素保存數字的最高有效位,鍊錶的最後一個元素保存數字的最低有效位。例如,數字202345在鍊錶中表示為(2->0->2->3->4->5)。要為這個表示數字的鍊錶加1,我們必須檢查清單中最低有效位的值。如果小於9就可以了,否則程式碼將更改下一個數字,依此類推。現在讓我們看一個範例來了解如何做到這一點,1999表示為(1->9->9->9)並添加1應該將其

鍊錶是一種資料結構,採用一系列帶有資料和指標的節點組織元素,特別適合處理大型資料集和頻繁的插入/刪除操作。它的基本組成部分包括節點(資料和指向下一個節點的指標)和頭節點(指向鍊錶中第一個節點)。常見鍊錶操作包括:新增(尾部插入)、刪除(特定值)和遍歷。

在Python中,鍊錶是一種線性資料結構,它由一系列節點組成,每個節點包含一個值和對鍊錶中下一個節點的引用。在本文中,我們將討論如何在Python中將元素新增至鍊錶的第一個和最後一個位置。 LinkedListinPython鍊錶是一種引用資料結構,用於儲存一組元素。它在某種程度上類似於數組,但是在數組中,資料儲存在連續的記憶體位置中,而在鍊錶中,資料不受此條件限制。這意味著資料不是按順序存儲,而是以隨機的方式儲存在記憶體中。 Thisraisesonequestionthatis,howwecanac

鍊錶(LinkedList)是一種常見的資料結構,它由一系列結點(Node)組成,每一個結點包含兩個關鍵屬性:資料域(Data)和指標域(Next)。其中,數據域用於儲存實際數據,而指標域則指向下一個結點。透過這種方式,鍊錶以一種靈活的方式儲存數據,適用於許多不同的應用場景。在Go語言中,鍊錶結構也得到了良好的支援。 Go的內建標準庫中提供了cont

Golang是一門高效能的程式語言,它的並發能力和記憶體管理使得它非常適合編寫高效的資料結構。鍊錶是一種常見的資料結構,以下將介紹如何使用Golang編寫高效的鍊錶結構,並提供具體的程式碼範例。鍊錶是一種線性資料結構,它由一個個節點組成,每個節點包含一個值和指向下一個節點的指標。相較於數組,鍊錶的優點在於插入和刪除元素的效率更高,因為不需要移動其他元素。然而,鏈
