常見演算法 反轉單鏈表

2021-10-23 17:40:41 字數 1028 閱讀 4190

使用3個指標,分別指示當前節點,當前節點的前乙個節點,以及後乙個節點。初始化前乙個節點為空。當節點個數大於1時,每遍歷乙個節點,更新它的next指標指向前乙個節點。同時更新前乙個節點和後乙個節點。直至當前節點指標為空,返回前乙個節點的指標。

#include

using

namespace std;

struct node

node

(int i)

:value

(i),

next

(null)}

;void

addnode

(node *

*list,

int i)

node *n =

*list;

node *cur = n;

node *tailp =

null

;while

(cur)

node *node =

newnode

(i);

tailp-

>next = node;

}void

printnode

(node *list)

} cout

reverselist

(node *list)

return prev;

}return list;

}int

main()

cout<<

"befor reverse:"

(head)

; node *reversehead =

reverselist

(head)

; cout<<

"after reverse:"

(reversehead)

;return0;

}

當前鍊錶長度大於1時,才需要反轉。

反轉後的鍊錶指標為指向前乙個節點的指標。

單鏈表反轉演算法

struct listnode 想到兩種方法 想法是構建乙個新的單鏈表,然後遍歷原來的單鏈表,每遍乙個就把它插入到最新的單鏈表的開頭,下面是 struct listnode reverselist struct listnode list temp list last null while temp...

C 演算法 反轉單鏈表

反轉單鏈表,我使用了兩種方法,不過他們都很相近。宣告 class clist 宣告反轉單鏈表函式 void reversesll clist clist prenode nullptr void csinglelinkedlist reversesll clist node,clist prenod...

演算法題 反轉單鏈表

時間限制 1秒 空間限制 32768k 輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。解法一.迴圈反轉鍊錶 非遞迴法 整體思路就是,從原鍊錶的頭部乙個乙個取節點並插入到新鍊錶的頭部 p始終指向要反轉的結點 newhead 指向反轉後的首結點 每反轉乙個結點,把p結點的next指向newhead,ne...