我理解的劍指Offer 反轉鍊錶

2021-08-27 20:15:51 字數 1413 閱讀 4945

題目描述:輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。

輸入:輸入可能包含多個測試樣例,輸入以eof結束。

對於每個測試案例,輸入的第一行為乙個整數n(0<=n<=1000):代表將要輸入的鍊錶的個數。

輸入的第二行包含n個整數t(0<=t<=1000000):代表鍊錶元素。

輸出:對應每個測試案例,

以此輸出鍊錶反轉後的元素,如沒有元素則輸出null。

樣例輸入:

5

1 2 3 4 5

0

樣例輸出:

5 4 3 2 1

null

我的理解:

1.為了時間複雜度o(n),只能掃表一次。

2.「鍊錶反轉」 一般人都會想到只要把不是頭結點的結點指標都指向前乙個就可以了。

3。思路很簡單,但是會遇到問題:鍊錶操作都會怕遇到「斷鏈」。如何解決這個問題是關鍵。

4.開始結點、邊界結點。

下面是解題思路和演算法:

【解析】

*日期:2013-11-21

*題號:題目1518:反轉鍊錶

*結果:ac

*總結:

**********************************/

#include

#include

#include

#include

using

namespace

std;

typedef

struct

listnodelistnode;

listnode*reverselist(listnode*head)

else

p->next=pre;

pre=p;

p=pnext;

}return

head; }

}int

main()

//無資料 if

(n<=0)

//輸出反轉後資料

else

else

p=p->next;}}

}return0;

}

劍指offer 反轉鍊錶

輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。方法1 將單鏈表儲存為陣列,然後按照陣列的索引逆序進行反轉。方法2 使用三個指標遍歷單鏈表,逐個鏈結點進行反轉。方法3 從第2個節點到第n個節點,依次逐節點插入到第1個節點 head節點 之後,最後將第乙個節點挪到新錶的表尾。public class l...

劍指offer 反轉鍊錶

輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。1.非遞迴 struct listnode class solution listnode ppre null listnode p phead listnode pnext null while p null else p pnext return p...

《劍指offer》 反轉鍊錶

輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素。之前錯誤的寫法,一直不明白 原因是移位的時候,pcurr移到下一位時,裡面的值已經變成反向指標了,所以不能成功移動,就迴圈巢狀進去了,所以還需要乙個變數pnext來儲存移位前的值。struct listnode class solution phead ...