博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode----92. Reverse Linked List II
阅读量:4113 次
发布时间:2019-05-25

本文共 1229 字,大约阅读时间需要 4 分钟。

链接:

大意:

给定一个链表head,以及一个整数区间[m,n],其中1 <= m <= n <= length of list。要求对链表的第m到第n个元素进行逆置。

思路:

将链表分为三段:

第一段:1 ~ m - 1。找到第一段的最后一个节点,用于和第二段逆置后的首节点进行相连

第二段:m ~ n。使用头插法重新构造第二段链表,并在最后记录第三段的首节点,用于和第二段逆置后的尾节点进行连接

第三段:n + 1 ~ length。

代码:

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */class Solution {    public ListNode reverseBetween(ListNode head, int m, int n) {        if (m == n)            return head;        ListNode pre = null, cur = head; // pre为第一段的尾节点,cur为当前遍历到的节点        int i = 1;        // 获取到第一段的尾节点        while (i < m) {            pre = cur;            cur = cur.next;            i++;        }        // 对第二段进行头插法重新构造链表 跳出循环后cur为第三段的首节点        ListNode head2 = new ListNode(0), newTail = cur; // newTail为第二段转置后的尾节点  用于与第三段相连        while (i <= n) {            ListNode tmp = cur.next;            cur.next = head2.next;            head2.next = cur;            cur = tmp;            i++;        }        newTail.next = cur; // 连接第二段和第三段        if (pre == null) { // 意味着m==1            return head2.next;        } else {            pre.next = head2.next; // 连接第一段和第二段            return head;        }    }}

结果:

结论:

做链表题,主要就是逻辑思路。 

 

 

转载地址:http://vtesi.baihongyu.com/

你可能感兴趣的文章
链睿和家乐福合作推出下一代零售业隐私保护技术
查看>>
Unifrax宣布新建SiFAB™生产线
查看>>
艾默生纪念谷轮™在空调和制冷领域的百年创新成就
查看>>
NEXO代币持有者获得20,428,359.89美元股息
查看>>
Piper Sandler为EverArc收购Perimeter Solutions提供咨询服务
查看>>
RMRK筹集600万美元,用于在Polkadot上建立先进的NFT系统标准
查看>>
JavaSE_day12 集合
查看>>
JavaSE_day14 集合中的Map集合_键值映射关系
查看>>
Day_15JavaSE 异常
查看>>
异常 Java学习Day_15
查看>>
JavaSE_day_03 方法
查看>>
day-03JavaSE_循环
查看>>
Mysql初始化的命令
查看>>
day_21_0817_Mysql
查看>>
day-22 mysql_SQL 结构化查询语言
查看>>
MySQL关键字的些许问题
查看>>
浅谈HTML
查看>>
css基础
查看>>
HTML&CSS进阶
查看>>
Servlet进阶和JSP基础
查看>>