Leetcode: Reverse Linked List II

来源:互联网 发布:淘宝 无忧退货 运费 编辑:程序博客网 时间:2024/04/29 12:02

Reverse a linked list from position m to n. Do it in-place and in one-pass.

For example:
Given 1->2->3->4->5->NULLm = 2 and n = 4,

return 1->4->3->2->5->NULL.

Note:
Given mn satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.

/** * 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==NULL || head->next ==NULL)return head;ListNode* tmp = reverseList(head->next);head->next->next = head;head->next = NULL;return tmp;}ListNode *reverseBetween(ListNode *head, int m, int n) {        // Note: The Solution object is instantiated only once.        //1 <= m <= n <= length of list.if(head==NULL || m>=n)return head;ListNode* pm = NULL;ListNode* pn = NULL;if(m==1){ListNode* p=head;while(--n) p=p->next;pn=p->next;p->next = NULL;head = reverseList(head);p=head;while(p->next) p=p->next;p->next = pn;return head;}else{pm = head;while(--m > 1) pm = pm->next;ListNode* p = head;while(--n) p = p->next;pn = p->next;p->next = NULL;pm->next = reverseList(pm->next);p=pm->next;while(p->next) p=p->next;p->next = pn;return head;}    }};

精简下代码,1.通过在前面放一个节点不再判断是不是head;2.通过插入节点的方式不再翻转链表。

/** * 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) return head;        ListNode* tmp = new ListNode(0);        tmp->next = head;        head = tmp;                int idx = 1;        ListNode* p = head;        while(idx < m){ p = p->next; idx++;}        ListNode* insertNode = p;        p = p->next;        tmp = p;        while(idx <= n){            ListNode* q = p->next;            p->next = insertNode->next;            insertNode->next = p;            p = q;            idx++;        }        tmp->next = p;        return head->next;    }};





原创粉丝点击