博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode -- Reverse Linked List II
阅读量:5129 次
发布时间:2019-06-13

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

Question:

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->NULLm = 2 and n = 4,

return 1->4->3->2->5->NULL.

Note:

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

 

Analysis:

翻转一个链表的指定位置之间的节点。请只遍历一遍链表并就地转置。

给定链表,只翻转给定参数的中间部分,因此我们需要用一个指针记录要翻转的部分的前一个位置pre,记录要翻转链表的首节点hh,注意终止条件,翻转操作与链表逆置一样。考虑到第一个节点有可能是需要翻转的第一个节点,因此为方便统一操作,我们可以设置一个附加节点h。

 

Answer:

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */public class Solution {    public ListNode reverseBetween(ListNode head, int m, int n) {        if(head == null || head.next == null)            return head;        if(m == n)            return head;                ListNode h = new ListNode(-1);        h.next = head;        int count = 0;        ListNode pre = h;        while(count + 1 < m) {            pre = pre.next;            count++;        }                ListNode hh = pre.next, p, q; //hh是要逆转部分的第一个节点        //count++;        while(count + 1 < n) {            p = hh.next;            q = pre.next;            pre.next = p;            hh.next = p.next;            p.next = q;            count++;        }        return h.next;    }}

 

转载于:https://www.cnblogs.com/little-YTMM/p/5334320.html

你可能感兴趣的文章
Objective-C 继承与多态
查看>>
图像预处理第6步:分割,并在分割出来的字符外面画框以标识
查看>>
NTP时间服务
查看>>
2016.04.11,英语,《Vocabulary Builder》Unit 12
查看>>
CoreData教学完整版(封装我们自己的CoreData工具)_Dylan
查看>>
数据库锁
查看>>
Web项目去掉Js文件红叉
查看>>
Linux 学习路径图
查看>>
[LeetCode] 1. Two Sum 两数之和
查看>>
Linux系统shell脚本对字符串、数字、文件的判断
查看>>
Vue生命周期
查看>>
【WebStorm】前端工具开发利器webstrom专篇
查看>>
利用MySQL统计一列中不同值的数量方法示例
查看>>
微服务设计方法
查看>>
大项目之网上书城(九)——订单Demo
查看>>
Hexo主题实现多级分类显示
查看>>
UITableView-数据刷新
查看>>
(摘要)100个伟大的商业理念:理念16:深入投入,绘制蓝本
查看>>
Fiddler抓包配置具体步骤
查看>>
购物车程序
查看>>