LeetCode92:反转链表II

白昼怎懂夜的黑 提交于 2020-02-29 20:40:49
/*
 反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。

说明:
1 ≤ m ≤ n ≤ 链表长度。

示例:

输入: 1->2->3->4->5->NULL, m = 2, n = 4
输出: 1->4->3->2->5->NULL

 */
 /*

 */
class Solution {
public:
    ListNode* reverseBetween(ListNode* head, int m, int n) {
        ListNode *pre=NULL;
        ListNode *cur=head;
        while(m>1)
        {
            //先让pre指向m位置的前一个元素,cur指向m位置的元素
            pre=cur;
            cur=cur->next;
            m--;
            n--;
        }
        //用p1来记录pre的值,用p2来记录cur的值,因为之后p1和p2要指向别的位置
        ListNode *p1=pre;
        ListNode *p2=cur;
        while(n>0)
        {
            //开始翻转
            ListNode *next=cur->next;

            cur->next=pre;
            pre=cur;
            cur=next;
            n--;
        }
        //翻转完成后让p1指向pre的位置,让p2指向cur的位置,使得串在一起
        if(p1!=NULL){
            p1->next=pre;
        }
        else
        {
            head=pre;
        }
        p2->next=cur;
        return head;
    }
};
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!