刷題筆記12——單鏈表反轉
阿新 • • 發佈:2018-12-21
題目描述
輸入一個連結串列,反轉連結串列後,輸出新連結串列的表頭。
方法1:就地反轉連結串列
思路如下:
初始化
好的,假如我們要讓q指向p,那麼q的下一個結點就沒辦法找到了,就會出現斷鏈的情況,如圖
所以,在每次迴圈的時候,都額外需要一個指標r,去指向q的下一個結點 此時開始反轉,讓後一節點連結前一結點 開始第二次迴圈,此時r又可以指向q的下一結點。
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
if(pHead == NULL)
return NULL;
ListNode *p = pHead;
ListNode *q = pHead->next;
pHead->next = NULL;
ListNode *r;
while(q) {
r = q->next;
q-> next = p;
p = q;
q = r;
}
pHead = p;
return pHead;
}
};