解法 :
其實資料結構的課本上就有,但是實在懶得再去翻書了,所以在這邊註記一下
假設Linked-List是長這樣
1 -> 2 -> 3 -> 4 -> 5
那麼在這邊先給定三個變數,分別是previous(上一個),current(當前的),以及下一個(later)
一開始的初始值給定
previous = nullptr
current當然就是 1
later 就是 2
接下來一直進行以下的動作
回合1
1.current->next改成指向previous而不是指向2
nullptr <- 1 2 -> 3 -> 4 -> 5
p c l
2.previous設為1
nullptr <- 1 2 -> 3 -> 4 -> 5
c l
p
3.將current設為2
nullptr <- 1 2 -> 3 -> 4 -> 5
p c
l
4.將last設為3
nullptr <- 1 2 -> 3 -> 4 -> 5
p c l
接下來的回合完全一樣只是起始點變了
程式碼
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if(head == nullptr)
return head;
ListNode *previous = nullptr,
*current = head,
*later = head->next;
while(later != nullptr)
{
current->next = previous;
previous = current;
current = later;
later = later->next;
}
//current最後的next還要再重新指回上一個才可以接起來
current->next = previous;
return current;
}
};
沒有留言 :
張貼留言