zoukankan      html  css  js  c++  java
  • Reverse linked list(逆转从n到m处的单链表)--leetcode

    题目描述:
    Reverse a linked list from position m to n. Do it in-place and in one-pass.
    For example:
    Given1->2->3->4->5->NULL, m = 2 and n = 4,
    return1->4->3->2->5->NULL.
    Note:
    Given m, n satisfy the following condition:
    1 ≤ m ≤ n ≤ length of list.

    解题思路:
    找到第m个结点,并记录其前继结点,然后依次从m+1开始到n,逆转后续结点,注意在最后的时候,修改原先第m处的链表的next指针。
    代码如下:

    class Solution {
    public:
        ListNode *reverseBetween(ListNode *head, int m, int n) {
            if (!head || m < 1 || m == n) return head;
    
            //前m-1个链表
            ListNode *q = NULL; //用q保存第m-1个结点
            ListNode *p = head; //让p指向第m个结点
            int count = 1;
            while(count < m && p){
                q = p;
                p = p->next;
                ++count;
            }
    
            //逆转m到n个结点
            ListNode *end = p;//始终指向逆转前的第m个结点
            ListNode *pre = p;//可以看为逆置链表的头结点
            ListNode *pNext = NULL;//指向p的下一个结点
            p = p->next;//(指向m+1处的结点)
            for (count = m+1; count <= n; ++count){
                pNext = p -> next;//保存下一个结点信息
                p -> next = pre;//头插法
                pre = p;//前移pre
                p = pNext;//回到初始链表的下一个结点
            }
            /* 结束的时候,end指向逆转前的第m个结点(逆转后,为逆转链表的最后一个结点),
               pre指向指向逆转后第m个结点(逆转前的第n个结点), p指向原链表的n+1个结点
            */
            //链接逆转链表和后面的链表
            end -> next = p;//这一步,修正了原链表第m个结点后项指针
    
            //如果第m-1个结点为空的话,表示,从head开始逆转
            if (q){//不为空,将前m-1个链表和逆转后的链表链接
                q -> next = pre;
            }else{//为空,逆转链表的头结点,就是要求的链表
                head = pre;
            }
            return head;
        }
    };
    

    配图分析:
    分析

    不积跬步,无以至千里;不积小流,无以成江海。
  • 相关阅读:
    朴素贝叶斯分类算法原理分析与代码实现
    决策树分类算法原理分析与代码实现
    Eclipse Java 调试基本技巧
    Eclipse Java 开发平台实用技巧
    泛型算法
    集合类型的使用示例
    异常
    内部类
    对象复制
    界面设计常用CSS属性
  • 原文地址:https://www.cnblogs.com/xiaocai-ios/p/7779795.html
Copyright © 2011-2022 走看看