Middle-题目77:92. Reverse Linked List II
2016-05-31 16:56
405 查看
题目原文:
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.
题目大意:
给出一个单链表和两个数m,n,翻转链表的m~n位。
题目分析:
还是用two pointers的思想,记住m的前驱,令其后继指向n,而n的后继指向m的next,以此类推。(在纸上画画,并多考虑一些特殊情况,如m是开头,n是结尾等)
源码:(language:c)
成绩:
0ms,100%
Cmershen的碎碎念:
这道题在纯链表节点处理的题里面算是较难的了,须结合源码并在纸上演示一下才能理解指针间的关系。
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.
题目大意:
给出一个单链表和两个数m,n,翻转链表的m~n位。
题目分析:
还是用two pointers的思想,记住m的前驱,令其后继指向n,而n的后继指向m的next,以此类推。(在纸上画画,并多考虑一些特殊情况,如m是开头,n是结尾等)
源码:(language:c)
struct ListNode* reverseBetween(struct ListNode* head, int m, int n) { if (m == n || !head || !head->next) return head; int i = 1; struct ListNode* mPtr = head, *nPtr = head; for (struct ListNode* node = head; node; node = node->next, i++) { if (i == m) mPtr = node; if (i == n) nPtr = node; } if (mPtr == head) { while (mPtr != nPtr) { struct ListNode* temp = mPtr; mPtr = mPtr->next; temp->next = nPtr->next; nPtr->next = temp; } return nPtr; } else { struct ListNode* mPtrPrev = head; while (mPtrPrev->next != mPtr) mPtrPrev = mPtrPrev->next; mPtrPrev->next = nPtr; while (mPtr != nPtr) { struct ListNode* temp = mPtr; mPtr = mPtr->next; temp->next = nPtr->next; nPtr->next = temp; } return head; } }
成绩:
0ms,100%
Cmershen的碎碎念:
这道题在纯链表节点处理的题里面算是较难的了,须结合源码并在纸上演示一下才能理解指针间的关系。
相关文章推荐
- Lock 和 synchronized
- 『QT』创客空间元件管理系统
- 双重检查锁定与单例模式
- 有关P2P相关系统的整理
- Android实现动画过程中遇到View.mViewFlags on null object refrence
- <<Bootstrap基础教程>> 新书出手,有心栽花花不开,无心插柳柳成荫
- php获取汉字的拼音 拼音首字母
- python学习 流程控制语句
- C#开发体感游戏 Kinect应用知识
- Middle-题目76:47. Permutations II
- Python中Collections模块的Counter容器类使用教程
- c#调用带out类型参数的存储过程拿不到返回值的解决办法
- CSS回顾系列0之杂谈
- sql: 临时表与表变量的区别
- Kvm启动ubuntu虚拟机无法联网
- Java泛型的特性与实现
- linux端口号与PID的互相查询
- 数据库设计原则(转载)
- 翻转游戏题解
- Android TCP通信(二)