Leetcode Reverse Linked List II 92

来源:互联网 发布:傲剑金蛇数据 编辑:程序博客网 时间:2024/06/06 05:07

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.

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

题目链接

找到第m个结点,从这里翻转到n界点
分为三部分,翻转之前的,翻转的序列以及未翻转的
需要注意的是m=1的情况 添加一个头结点

/** * 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;        if(n==m) return head;        ListNode *first = new ListNode(-1);        first->next=head;        int cnt=1;        ListNode *pf=first;        ListNode *p=head;        while(p!=NULL){                if(cnt==m) break;                else{                        pf=p;                        p=p->next;                        cnt++;                }        }        ListNode *cur=p;        ListNode *pre=p->next;        cur->next=NULL;        int gap=0;        while(pre!=NULL){                gap++;                ListNode *temp=pre->next;                pre->next=cur;                cur=pre;                pre=temp;                if(gap==(n-m)) {                    pf->next=cur;                    if(pre!=NULL)                        p->next=pre;                    break;                }        }        if(m==1){            head=pf->next;        }        return head;    }};
0 0
原创粉丝点击