zoukankan      html  css  js  c++  java
  • 92. 反转链表 II

    反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。

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

    示例:

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

    思路:

      • 扫描一趟完成,先走到需要反转的地方,记录反转节点的前一个节点为连接节点 con;
      • 反转的第一个节点为 反转链表的尾节点,记为 tail;
      • 在 m ~ n区间反转链表,反转链表结束后,头结点为 pre,下一个正常节点为 cur;
      • 则 con -> pre , tail -> cur,当 m==1时, con为null,需要特殊处理。

    class Solution {
        public ListNode reverseBetween(ListNode head, int m, int n) {
            ListNode pre = null, cur = head;
            while(m > 1){
                pre = cur; //先走到需要反转的地方,记录反转的前一个节点为 pre
                cur = cur.next; //记录需要反转的起始节点为 cur
                m--;
                n--;
            }
            ListNode con = pre, tail = cur; // m == 1时,con == null
            //记录链接节点为 con,反转中的尾节点为 tail
            ListNode tmp = null; //记录反转中的,下一个头结点
            while( n > 0){
                tmp = cur.next;
                cur.next = pre; //反转链表
                pre = cur;
                cur = tmp;
                n--;
            }
            if(con == null) head = pre; //如果连接点为 null 值,更新头结点
            else con.next = pre; //否则,反转节点的头节点,与前面的连接点链接起来
            tail.next = cur; //反转节点的尾节点,连接到剩余节点
            return head;
        }
    }
  • 相关阅读:
    array、vector、forward-list、list、deque的扩容,栈与队列,基于范围的for循环
    带默认参数值的函数
    :: 访问全局变量
    using来定义类的别名,typedef,#define
    const int* p
    内存
    变量的定义,强制类型转换
    HTTP请求流程(一)----流程简介
    DIY一个DNS查询器:程序实现
    详解C/C++函数指针声明
  • 原文地址:https://www.cnblogs.com/luo-c/p/13969988.html
Copyright © 2011-2022 走看看