1. 程式人生 > >刷題筆記12——單鏈表反轉

刷題筆記12——單鏈表反轉

題目描述

輸入一個連結串列,反轉連結串列後,輸出新連結串列的表頭。

方法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; } };