題目描述:輸入乙個鍊錶,反轉鍊錶後,輸出新鍊錶的表頭。
一、利用棧(空間效率低)
利用棧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 ...