【剑指offer】反转链表,C++实现(链表)
1.題目
- 輸入一個(gè)鏈表的頭結(jié)點(diǎn),首先反轉(zhuǎn)鏈表后,然后輸出鏈表的所有元素(牛客網(wǎng))。
2.思路
# 反轉(zhuǎn)鏈表
輔助指針:定義三個(gè)用于翻轉(zhuǎn)鏈表的輔助指針和一個(gè)用于表示翻轉(zhuǎn)鏈表頭結(jié)點(diǎn)的指針,node指向當(dāng)前節(jié)點(diǎn)、left指向當(dāng)前節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn)、right指向當(dāng)前節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)、ReverseHead指向翻轉(zhuǎn)鏈表的頭結(jié)點(diǎn)。
翻轉(zhuǎn)鏈表過(guò)程:循環(huán)翻轉(zhuǎn)鏈表,每次循環(huán)翻轉(zhuǎn)一個(gè)結(jié)點(diǎn)。判斷node是否是最后一個(gè)結(jié)點(diǎn),如果是最后一個(gè)節(jié)點(diǎn),則reverseHead指向node(確定翻轉(zhuǎn)鏈表表頭節(jié)點(diǎn)),然后node指向left(翻轉(zhuǎn)鏈表),退出循環(huán);如果不是最后一個(gè)節(jié)點(diǎn),則node指向left(翻轉(zhuǎn)鏈表),移動(dòng)left和node指針。
# 魯棒性
- 空鏈表
- 有一個(gè)節(jié)點(diǎn)的鏈表
- 有多個(gè)節(jié)點(diǎn)的鏈表
3.code
1 /* 2 struct ListNode { 3 int val; 4 struct ListNode *next; 5 ListNode(int x) : 6 val(x), next(NULL) { 7 } 8 };*/ 9 class Solution { 10 public: 11 ListNode* ReverseList(ListNode* pHead) 12 { 13 // 反轉(zhuǎn)指針 14 ListNode* pNode=pHead; // 當(dāng)前節(jié)點(diǎn) 15 ListNode* pPrev=nullptr;// 當(dāng)前節(jié)點(diǎn)的上一個(gè)節(jié)點(diǎn) 16 ListNode* pNext=nullptr;// 當(dāng)前節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn) 17 ListNode* pReverseHead=nullptr;//新鏈表的頭指針 18 19 // 反轉(zhuǎn)鏈表 20 while(pNode!=nullptr) 21 { 22 pNext=pNode->next; // 建立鏈接 23 24 if(pNext==NULL) // 判斷pNode是否是最后一個(gè)節(jié)點(diǎn) 25 pReverseHead=pNode; 26 27 pNode->next=pPrev; // 指針?lè)崔D(zhuǎn) 28 pPrev=pNode; 29 pNode=pNext; 30 } 31 return pReverseHead; 32 } 33 };??
轉(zhuǎn)載于:https://www.cnblogs.com/wanglei5205/p/8572458.html
總結(jié)
以上是生活随笔為你收集整理的【剑指offer】反转链表,C++实现(链表)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 数据挖掘实战(一):Kaggle竞赛经典
- 下一篇: c++基础_特殊回文数