15 反轉鍊錶

2021-09-27 18:40:05 字數 1380 閱讀 1009

題目描述:輸入乙個鍊錶,反轉鍊錶後,輸出新鍊錶的表頭。

一、利用棧(空間效率低)

利用棧stack容器後進先出:

1.將鍊錶從頭到尾遍歷放入stack中;

2.棧依次彈出元素賦給下乙個結點值,指標指向下乙個結點;

2.然後改變結點指標指向前乙個位置,即完成反轉。

/*

struct listnode

};*/

class solution

/*此時stack1棧頂層就是鍊錶尾部*/

/*phead指向鍊錶最後乙個位置*/

listnode* ptr=phead;

while(!stack1.empty())//將棧中元素依次彈出,最底下是煉表頭

//其實就是將鍊錶倒過來,即結點的指標指向前乙個

phead->next=null;//最後,讓phead指向的內容為null

return ptr;}};

二、指標移動解法需要三個指標,分別指向當前結點、前乙個節點、下乙個結點;

(2)pnext由null轉為指向當前結點下乙個

pnext=phead->next;//pnext指標初始為null,此時讓它指向phead的下乙個結點

(3)「核心語句」

phead->next=pre;//切斷phead與下一結點關聯,讓phead的next指標指向前乙個結點,完成反轉

(4)三個節點向後移動,操作下乙個

pre=phead;//三個指標位置依次向後移動,當前結點是下乙個的前乙個,

/*

struct listnode

};*/

class solution

return pre;//依次向後移動指標,迴圈終止phead為null,此時pre指標恰好指向鍊錶尾}};

15 反轉鍊錶

題目描述 輸入乙個鍊錶,反轉鍊錶後,輸出新鍊錶的表頭。struct listnode class solution 第一種方法是 非遞迴方法 struct listnode class solution return ppre 第二種方法是 遞迴方法 遞迴的方法其實是非常巧的,它利用遞迴走到鍊錶的末...

15 反轉鍊錶

定義乙個函式,輸入乙個鍊錶的頭節點,反轉該鍊錶並輸出反轉後鍊錶的頭節點。修改指標指向。記憶 每一次 對應while中四步 1 原鏈的頭結點指向新結點的後置結點 2 頭結點被新結點後置指標指向 3 新結點成為頭結點 4 保持q指標在p指標的所指節點的下乙個節點上 返回listnode defrever...

15 反轉鍊錶

1 反轉鍊錶2 題目 輸入乙個鍊錶,反轉鍊錶後,輸出鍊錶的所有元素 3struct listnode48 9 思路 比如 1 2 3 4 5 6 10 反轉後 1 2 3 4 5 6 11 為了防止3和4斷開,需要以下操作 12 首先知道結點3的前乙個結點2,因為我們需要把3的next指向2 13 ...