Reverse Linked List II
来源:互联网 发布:淘宝商品名称多少字 编辑:程序博客网 时间:2024/05/16 01:31
题目: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->NULL
, m = 2 and n = 4,
return 1->4->3->2->5->NULL
.
Note:
Given m, n satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.
思路:
这一题比较巧妙,实际上是这样的一个循环:
如图所示,通过循环找到第m个,标记为f,f的下一个标记为t,f指向f 的next的next,s指向t,t 指向f.这是第一次,
然后呢,f 还是指向f 的next的next,slow 指向刚刚f 的next,也就是被标记的t ,如此一来,便完成循环。
代码:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode* reverseBetween(ListNode* head, int m, int n) { /*ListNode *dummy=new ListNode(0); dummy->next = head; ListNode *slow = dummy; n -= m; while (--m) slow = slow->next; ListNode *fast = slow->next, *tmp; while (n--) { tmp = fast->next; fast->next = fast->next->next; tmp->next = slow->next; slow->next = tmp; } return dummy->next;*/ ListNode *dummy=new ListNode(0); dummy->next=head; ListNode *slow=dummy; n=n-m;//这一句话不能够放在下面循环的后面,因为m变了。 while(--m){ slow=slow->next;//在m个之前的一个 } ListNode *fast=slow->next,*tmp; while(n--){ tmp=fast->next; fast->next=fast->next->next; tmp->next= slow->next; slow->next=tmp; //fast=slow->next; } return dummy->next; }};
0 0
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- Reverse Linked List II
- 计算矩阵边缘元素之和(C程序设计进阶第5周)
- Android 一个强大实用的版本升级demo(thread+service+Notification)
- Android Fragment 真正的完全解析(上)
- Oracle基础整理(代码符号部分在粘贴过程中变为了中文符号,请自行改正)
- eclipse 导入所依赖的android 项目
- Reverse Linked List II
- 基于TCP的Sockets编程
- python-excel的模块xlrd和xlwt用法及注意事项整理
- Lowest Common Ancestor in a Binary Search Tree.
- 二维数组右上左下遍历(C程序设计进阶第5周)
- WPS for Linux 提示字体缺失的处理办法
- 作为股权类投资人,我们的投资偏好和投资原则
- Linux的touch命令使用
- 牛客网 | 表示数值的字符串