【LintCode】翻转链表 II
来源:互联网 发布:seo资源网 编辑:程序博客网 时间:2024/04/30 19:04
题目
给一个链表,然后我们要把这个链表中第m个节点到第n个节点的部分翻转。
样例
给出链表1->2->3->4->5->null, m = 2 和n = 4,返回1->4->3->2->5->null
代码及注释
<span style="font-size:18px;">/** * Definition for ListNode * public class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */public class Solution { /** * @param ListNode head is the head of the linked list * @oaram m and n * @return: The head of the reversed ListNode */ public ListNode reverseBetween(ListNode head, int m , int n) { // write your code if(m>=n||head==null) return head; //在头结点之前引入一个结点,因为头结点可能被翻转,这样可以使得头结点的 //翻转和普通结点一样 ListNode before=new ListNode(0); before.next=head; head=before; for(int i=1;i<m;i++){ if(head==null){ return null; } //因为前面在头结点之前引入了一个结点,所以这里head指向m的前一个结点 head=head.next; } //当前结点,即M位置的结点,未移动,始终指向M所在的结点 ListNode mNode=head.next; ListNode dangqianNode=mNode;//当前结点,后面会对其进行移动,值会改变 ListNode next=mNode.next;//当前结点的下一个结点 ListNode mQianMianDeNode=head;//M前一个位置的结点,从未改变 for(int i=m;m<n;m++){ if(next==null) return null; ListNode temp=next.next;//记录当前结点的下一个结点的下一个结点 next.next=dangqianNode;//改变当前结点的下一个结点链表指向的方向, //即将下一个结点的next指向当前结点 dangqianNode=next;//将当前结点向后移动 next=temp;//将当前结点的下个结点向后移动 /* 示例过程: 如:2->3->4 2是当前结点(dangqianjiedian ) 3是当前结点的下一个结点(next) 4是当前结点的下个结点的下个结点(next.next) temp=next.next; temp=4 记录next.next next.next=dangqianNode; 3->2 改变链表指向的方向 dangqianNode=next; dangqiangNode=3; next=temp; next=4 */ } //避免链表断裂 //最开始的M之前的结点指向翻转后的当前结点 mQianMianDeNode.next=dangqianNode; //最开始的M结点,(即还未翻转的M结点),//指向当前结点(翻转后)的下一个结点 mNode.next=next; /* 1->2->3->4->5->null ; M-N 翻转后 (4->3->2) 1指向翻转后当前的结点 1->4 2指向翻转后的下一个结点 2->5 完成后you有 1->4->3->2->5->null; */ //返回在头结点前引入的结点的下一个结点 return before.next; } }</span>
0 0
- LintCode:翻转链表 II
- 【LintCode】翻转链表 II
- lintcode,翻转链表 II
- LintCode 36 翻转链表 II
- LintCode-----36.翻转链表 II
- [Lintcode]Reverse Linked List II 翻转链表 II
- LintCode-翻转链表
- lintcode 翻转链表
- LintCode:翻转链表
- lintcode,翻转链表
- 翻转链表,lintcode
- Lintcode 翻转链表
- LintCode 翻转链表
- 翻转链表-LintCode
- LintCode : 翻转链表
- [Lintcode]翻转链表
- lintcode--翻转链表
- Lintcode翻转链表
- NFS 服务器配置
- 基于FNET的32位ARM的bootloader
- H.264中块,宏块,片,图像的关系
- 浅谈短网址
- Android命令Monkey测试学习(一)
- 【LintCode】翻转链表 II
- z-index无效的几种情况
- 屏蔽storm ui的kill功能
- cmd习惯颜色
- Android组件式开发(2)——实现网格布局的RadioButton矩阵
- LightOJ 1019 Brush (V) 最短路裸题
- android developer tiny share-20160908
- SQL Server 取日期时间部分
- 146. LRU Cache