【剑指offer】反转链表,C++实现(链表)
生活随笔
收集整理的這篇文章主要介紹了
【剑指offer】反转链表,C++实现(链表)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.題目
- 輸入一個鏈表的頭結點,首先反轉鏈表后,然后輸出鏈表的所有元素(牛客網)。
2.思路
# 反轉鏈表
輔助指針:定義三個用于翻轉鏈表的輔助指針和一個用于表示翻轉鏈表頭結點的指針,node指向當前節點、left指向當前節點的前一個節點、right指向當前節點的下一個節點、ReverseHead指向翻轉鏈表的頭結點。
翻轉鏈表過程:循環翻轉鏈表,每次循環翻轉一個結點。判斷node是否是最后一個結點,如果是最后一個節點,則reverseHead指向node(確定翻轉鏈表表頭節點),然后node指向left(翻轉鏈表),退出循環;如果不是最后一個節點,則node指向left(翻轉鏈表),移動left和node指針。
# 魯棒性
- 空鏈表
- 有一個節點的鏈表
- 有多個節點的鏈表
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 // 反轉指針 14 ListNode* pNode=pHead; // 當前節點 15 ListNode* pPrev=nullptr;// 當前節點的上一個節點 16 ListNode* pNext=nullptr;// 當前節點的下一個節點 17 ListNode* pReverseHead=nullptr;//新鏈表的頭指針 18 19 // 反轉鏈表 20 while(pNode!=nullptr) 21 { 22 pNext=pNode->next; // 建立鏈接 23 24 if(pNext==NULL) // 判斷pNode是否是最后一個節點 25 pReverseHead=pNode; 26 27 pNode->next=pPrev; // 指針反轉 28 pPrev=pNode; 29 pNode=pNext; 30 } 31 return pReverseHead; 32 } 33 };??
轉載于:https://www.cnblogs.com/wanglei5205/p/8572458.html
總結
以上是生活随笔為你收集整理的【剑指offer】反转链表,C++实现(链表)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据挖掘实战(一):Kaggle竞赛经典
- 下一篇: PHP获取IP的多种方式解析