从leetcode 92.reverse-linked-list-ii 对链表的认识
来源:互联网 发布:手机看pdf软件 编辑:程序博客网 时间:2024/06/05 07:25
题目:
Reverse a linked list from position m to n. Do it in-place and in one-pass.
For example:
Given1->2->3->4->5->NULL, m = 2 and n = 4,
return1->4->3->2->5->NULL.
Note:
Given m, n satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.
/**
* 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(-1);
dummy.next=head;
ListNode* prev=&dummy;
for(int i=1;i<m;++i)
prev=prev->next;
ListNode* head2=prev;
prev=head2->next;
ListNode* cur=prev->next;
for(int i=m;i<n;++i){
prev->next=cur->next;
cur->next=head2->next;
head2->next=cur;
cur=prev->next;
}
return dummy.next;
}
};
* 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(-1);
dummy.next=head;
ListNode* prev=&dummy;
for(int i=1;i<m;++i)
prev=prev->next;
ListNode* head2=prev;
prev=head2->next;
ListNode* cur=prev->next;
for(int i=m;i<n;++i){
prev->next=cur->next;
cur->next=head2->next;
head2->next=cur;
cur=prev->next;
}
return dummy.next;
}
};
该题目的思路就是m到n之间进行一步步的交换
做的时候出现的问题有很多,原因在于自己对于链表的认识还很模糊
问题1. 在代码最后 return head ,正确应该是return dummy.next
当链表只有两个元素时,head指向第一个元素,当交换后,如果return head,则只返回交换后的后面一个元素
如{3,5},交换后为{5,3},则只返回 3
在只有两个元素时 dummy等同于head2了,在超过两个元素时,head2是m的前一个元素,这种想法是不对的,head2应该说是一个辅助结点,并不等同于dummy,
是自己新声明的一个,其next为prev的结点,返回链表则要返回dummy.next.. 真正等同于是prev=&dummy的引用符的使用
问题2.在写交换四连的时候出错了
对于这交换四式,prev->next=cur->next好理解,最后两步也没毛病
但在第二步我写成了 cur->next=prev就报错了,正确写法是cur->next=head->next
这是因为一开始我想当然认为是通过相邻元素的交换实现一段的交换,通过在笔上认真演示后才发现不是
总而言之,链表稍不注意就会出错,还需努力
阅读全文
0 0
- 从leetcode 92.reverse-linked-list-ii 对链表的认识
- LeetCode 92. Reverse Linked List II(翻转链表)
- 92.leetcode Reverse Linked List II(medium)[链表逆序]
- leetcode 92. Reverse Linked List II 反转链表
- [LeetCode]206. Reverse Linked List&92. Reverse Linked List II
- LeetCode 206. Reverse Linked List && 92. Reverse Linked List II
- 92. Reverse Linked List II leetcode list
- [LeetCode]92.Reverse Linked List II
- LeetCode 92. Reverse Linked List II
- [Leetcode] 92. Reverse Linked List II
- LeetCode --- 92. Reverse Linked List II
- [leetcode] 92.Reverse Linked List II
- [leetcode] 92. Reverse Linked List II
- 92. Reverse Linked List II LeetCode
- leetcode 92. Reverse Linked List II
- Leetcode 92. Reverse Linked List II
- LeetCode 92. Reverse Linked List II
- [LeetCode] 92. Reverse Linked List II
- Eclipse插件安装(在线和离线方式)
- linux下实现svn/maven自动拉取代码并发布
- MailBee.NET Objects接收电子邮件(POP3)教程三:POP3认证
- 矩阵乘法
- 对象
- 从leetcode 92.reverse-linked-list-ii 对链表的认识
- React Native加载图片详解
- mysql5.7.18修改或者设置密码
- CSU-ACM2017暑假集训2-二分搜索 poj-32732 Monthly Expense
- 【主流身份管理技术辨析】Authentication and Authorization: OpenID vs OAuth2 vs SAML
- Data Binding学习(二)
- 136. Single Number
- tarjan二分图匹配问题
- ios-关于cell的模板