对单链表反转链表
有一單鏈表,節點定義如下,試將此單鏈表反轉
struct Node {int data;Node* next;
};
??相信大家在平時的考試或者面試中經常會碰到此類反轉單鏈表的題目,遇到這類問題如何應對呢?
初始狀態
反轉后
??下面且聽我一點一點分解:
先寫一個大家都會的遍歷單鏈表的代碼段
Node* p = head;
while(p)
{//處理節點p p = p->next;
}
試想一下,我們目標是反轉,也就是說 p->next->next需要指向 p, 觀察一下上面代碼,每次得到p但是這個p需要下一個循環才能指向,也就是p->next->next,很自然想到:
需要一個臨時變量備份p,取last=nullptr
循環內需要更新p->next, 執行last, 因此需要臨時變量備份p->next, 因為這個值需要賦值給p,實現繼續while循環
代碼如下:
Node* reverse(Node* head)
{Node* last = nullptr;Node* p = head;while(p){Node* t = p->next;p->next = last;last = p;p= t; }return last;
}
總結
鏈表是一種常見的基礎數據結構,是一種線性表,是實現棧和隊列的基礎,應用非常廣泛,我們必須非常熟悉掌握鏈表的操作。單鏈表是鏈表中比較簡單的形式,反轉單鏈表操作,需要掌握鏈表的遍歷和拆合節點操作,實現時候注意指針指向必要時需要增加臨時變量存儲,防止造成循環。
總結
- 上一篇: Android 的NDK的Makefil
- 下一篇: shell 批量转换文件编码