大家好,今天来为大家分享Leetcode 143:重排链表解题攻略的一些知识点,和的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!
问题含义:重置链表的顺序,要求第一个节点连接到最后一个节点,然后最后一个节点连接到第二个节点,第二个节点连接到倒数第二个节点。
主意:
把链表看成两部分,左半部分和右半部分,首先找到右半部分的起始节点。 (当有奇数时,右半部分从中间节点的下一个开始)。
将右半部分节点压入栈中,这样栈顶节点就是链表的尾部。
从链表的头部开始,将左半部分的节点不断连接到栈顶弹出的节点。
公共无效reorderList(ListNode头){
if (head==null || head.next==null) {
返回;
}
//找到背面的起始节点
ListNode慢=头,快=头;
while (fast !=null fast.next !=null) {
慢=慢.下一个;
快=快.下一个.下一个;
}
ListNode rStart=fast==null ?慢: 慢.下一个;
//记录右侧要连接的节点
Stackstack=new Stack();
while (rStart !=null) {
stack.push(rStart);
rStart=rStart.next;
}
//连接工作
ListNode curLeft=head;
while (!stack.isEmpty()) {
ListNode nextLeft=curLeft.next;
ListNode curRight=stack.pop();
curLeft.next=curRight;
//如果下一个要连接的左节点是当前连接的右节点,那么此时curLeft和curRight就是链表中的相邻节点。
if (nextLeft==curRight) {
下一个左=空;
}
curRight.next=nextLeft;
curLeft=nextLeft;
}
if (curLeft !=null) {
curLeft.next=null;
}
【Leetcode 143:重排链表解题攻略】相关文章:
2.米颠拜石
3.王羲之临池学书
8.郑板桥轶事十则
用户评论
终于弄明白了 LeetCode 的这道题!
有9位网友表示赞同!
链表重排真是个脑洞大开的问题。
有6位网友表示赞同!
感觉这道题考验空间复杂度和时间复杂度的控制能力。
有5位网友表示赞同!
代码实现真是一件复杂的事…
有5位网友表示赞同!
看了很多解题思路,感觉还是我的理解不透彻...
有19位网友表示赞同!
希望以后遇到类似的题不会手足无措!
有19位网友表示赞同!
这道题把链表的操作玩得真是炉火纯青!
有7位网友表示赞同!
每次做 LeetCode 都能学到新东西。
有10位网友表示赞同!
LeetCode 上的数据结构相关的题目,真的是挺难度的。
有12位网友表示赞同!
解决这道题耗费了我很多时间和精力...
有15位网友表示赞同!
感觉自己的编程水平离目标还有一段距离呢!
有7位网友表示赞同!
看了别人的代码解读,感觉还是有差距的啊...
有7位网友表示赞同!
学习 LeetCode 不光能提升算法能力,还能锻炼思维逻辑。
有9位网友表示赞同!
这道题的思路很有启发性,让我对链表有了更深刻的理解!
有20位网友表示赞同!
坚持每天刷题,我相信一定能够掌握 LeetCode 的精髓!
有20位网友表示赞同!
Leetcode 真是个很好的学习平台,可以和世界各地的程序员交流学习。
有15位网友表示赞同!
做这道题让我对数据结构的知识体系有了更清晰的认识。
有7位网友表示赞同!
希望未来自己能够像解题大神一样轻松解决 LeetCode 的难题!
有12位网友表示赞同!
刷 LeetCode 过程中遇到困难,一定要查阅资料和寻求帮助!
有19位网友表示赞同!
LeetCode 上每一道题都是一个新的挑战,每一次都让我收获满满。
有14位网友表示赞同!