92. Reverse Linked List II

来源:互联网 发布:矩阵特征值分解 编辑:程序博客网 时间:2024/06/16 18:08

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->NULL, m = 2 and n = 4,

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

分析:
首先设置一个node节点,node->next=head;
再令一个pre节点遍历到m的前一个节点,如果m=2,那么pre就是第一个节点;
让cur为开始翻转的第一个节点
然后开始翻转

/** * 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) return NULL;            ListNode *node=new ListNode(-1);        node->next=head;        ListNode *pre=node;        for(int i=0;i<m-1;i++)            pre=pre->next;        ListNode *cur=pre->next;        for(int i=0;i<n-m;i++)        {            ListNode *suc=cur->next;            cur->next=suc->next;            suc->next=pre->next;            pre->next=suc;        }        return node->next;    }};
原创粉丝点击