Reverse Linked List II
2015-08-21 22:28
351 查看
原题:
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恰好等1或者n恰好为链表的长度。其他的就很简单了,可以AC的C++代码如下:
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恰好等1或者n恰好为链表的长度。其他的就很简单了,可以AC的C++代码如下:
[code]/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode *reverse(ListNode *head){ if(!head || !head->next){ return head; } ListNode *first = head; ListNode *second = head->next; ListNode *temp = NULL; while(second){ temp = second->next; second->next = first; first = second; second = temp; } head->next = NULL; return first; } ListNode *reverseBetween(ListNode *head, int m, int n) { if(m > n || m < 1 || n < 1) return NULL; if(m == n){ return head; } int length = 0; ListNode *pHead = head; while(pHead){ length ++; pHead = pHead->next; } pHead = head; if(length < n){ return NULL; } ListNode *start, *end, *middle = NULL; length = 0; while(pHead){ length ++; if(length == m) start = pHead; if(length == m-1) middle = pHead; if(length == n) end = pHead; pHead = pHead->next; } pHead = end->next; end->next = NULL; ListNode *part = reverse(start); if(middle) middle->next = part; else head = part; while(part && part->next){ part = part->next; } part->next = pHead; return head; } };
相关文章推荐
- 这样做,你会受益匪浅!
- 模拟登录学校教务管理系统,获取成绩单!
- 为何?
- hdu 5410 CRB and His Birthday(背包)
- 在线教育未来?这是个值得深思的问题。
- [LeetCode] Ugly Number II
- c++程序设计课程--简单的设计任务
- BZOJ 1024: [SCOI2009]生日快乐 dfs
- 缓存算法
- hdu 5407 CRB and Candies(数论)
- 大学第一次面临关于将来的选择,我的抉择
- PAT 1049. Counting Ones (30)
- linux下目录及终端学习
- UML类图关系
- Power Network 网络流入门题)
- 20150821日报
- Selenium 高阶应用之WebDriverWait 和 expected_conditions
- hdu 5406 CRB and Apple(树状数组+dp)
- w2k3企业版与w2k3 R2企业版
- 随机数大揭秘