トピック:単独リンクリストを逆にします。
例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
最初の反復解法:
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* next = nullptr;
ListNode* pre = nullptr;
while (head != nullptr) {
next = head->next;
head->next = pre;
pre = head;
head = next;
}
return pre;
}
};
要約:
-
現在ヘッドノードセーブ次のノード(現在のヘッドノード2、ノード3は、最初に保存)であります
-
(現在のヘッドノード(「ノード」)ノード1に2点)ヘッドノードの次のノードに現在のポイント「ノード」は、このステップは反転するためのものです
-
(ノード2は、「ノード」に設定されている)、「ノード」、現在のヘッドノードを設定します
-
次のノードは、「ヘッドノード」(ノード3「ヘッドノード」に設定されている)に配置されたセーブ
二再帰的なソリューション
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
//递归解法,重点是明白reverseList函数的作用是什么,并且相信他一定能完成。
ListNode* reverseList(ListNode* head) {
if(head==NULL || head->next==NULL){
return head;
}
ListNode *cur = reverseList(head->next);
head->next->next = head;
head->next = NULL;
return cur;
}
};