目录
博主也好长一段时间没有更新力扣的刷题系列了,今天给大家带来一道经典题目,今天博主一改往常的风格,用python给大家实现,希望大家可以从中学到一些东西
那么这里博主先安利一下一些干货满满的专栏啦!
手撕数据结构https://blog.csdn.net/yu_cblog/category_11490888.html?spm=1001.2014.3001.5482这里包含了博主很多的数据结构学习上的总结,每一篇都是超级用心编写的,有兴趣的伙伴们都支持一下吧!
算法专栏https://blog.csdn.net/yu_cblog/category_11464817.html
其实这道题标的是中等难度,其实并没有很难。
反转链表相信我们以前都实现过,我们可以直接调用接口。
现在要解决的问题就是怎么传参去反转
这里是实现的一些核心:
- 每走两步之后要断开链表,这就需要一个前导指针prev来记录遍历指针的前一个位置,方便断开链表(python没有指针的概念,这里博主只是这样说来方便大家理解)
- 调用接口之后我们需要拼接链表,因此我们也需要一个指针记录链表头的位置,我们用slow,遍历指针用fast,因为需要拼接,我们也需要slow的一个前导指针,方便拼接链表
关于实现过程中的一些细节,博主给大家在代码中指出了!
- # Definition for singly-linked list.
- # class ListNode:
- # def __init__(self, val=0, next=None):
- # self.val = val
- # self.next = next
- class Solution:
- def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
- if head==None: return head #处理特殊情况
- tail=ListNode()
- tail.next=None
- cur=head # 遍历链表
-
- while cur:
- next=cur.next
- cur.next=tail
- tail=cur # 把tail往后挪动
- cur=next
- # 找到结尾前最后一个节点 删除它
- cur=tail
- prev=None
- while cur.next:
- prev=cur
- cur=cur.next
- # 此时prev就是前一个
- prev.next=None
-
- return tail
- def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:
- newhead=ListNode()
- newhead.next=head
- fast=head
- fast_prev=newhead
- slow=head
- slow_prev=newhead
-
- while fast:
- for i in range(0,2):
- if not fast:
- break
- fast_prev=fast
- fast=fast.next
- fast_prev.next=None
- slow_prev.next=self.reverseList(slow)
- # 这里的fast_prev已经更新了,需要找尾
- while fast_prev.next:
- fast_prev=fast_prev.next
- fast_prev.next=fast
- # 迭代
- slow_prev=fast_prev
- slow=fast
- return newhead.next
看到这里 相信大家对这道题的解题方法已经有了一定的理解了吧?如果你感觉这篇文章对你有帮助的话,希望你可以持续关注,订阅专栏,点赞收藏都是我创作的最大动力!
( 转载时请注明作者和出处。未经许可,请勿用于商业用途 )
更多文章请访问我的主页