【LeetCode】92. 反轉連結串列 II 結題報告 (C++)
阿新 • • 發佈:2019-01-07
題目描述:
反轉從位置 m 到 n 的連結串列。請使用一趟掃描完成反轉。
說明:
1 ≤ m ≤ n ≤ 連結串列長度。
示例:
輸入: 1->2->3->4->5->NULL, m = 2, n = 4
輸出: 1->4->3->2->5->NULL
解題方案:
本題解法的一個亮點是使用dummy作為頭指標,最後函式返回dummy->next就行了。不知道為啥要叫dummy,dummy有笨蛋的意思。。。連結串列型別的題目思路大致還是一樣的,沒有很大的區別,注意多使用幾個指標就好了。本題解法,有點像是連結串列結點頭插法加入隊中。。
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* reverseBetween(ListNode* head, int m, int n) { if (head == NULL || head->next == NULL) { return head; } ListNode* dummy = new ListNode(0); dummy->next = head; ListNode* prev = dummy; for (int i = 0; i < m - 1; i++) { prev = prev->next; } ListNode* start = prev->next; ListNode* then = start->next; for (int i = 0; i < n - m; i++) { start->next = then->next; then->next = prev->next; prev->next = then; then = start->next; } return dummy->next; } };