两两交换链表中的节点

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。


image.png

思路

建议使用虚拟头结点,这样会方便很多,要不然每次针对头结点(没有前一个指针指向头结点),还要单独处理。看图,这个使用代码随想录的图


image.png

不过写代码时步骤可以翻过来以3,2,1的顺序写,这样就不用创建临时变量存储节点了

# class ListNode:
#     def __init__(self,val = 0,next = None):
#         self.val = val
#         self.next = next


class Solution:
    def swapPairs(self, head: ListNode) -> ListNode:
        res = ListNode(next=head)
        pre = res

        # 必须有pre的下一个和下下个才能交换,否则说明已经交换结束了
        while pre.next and pre.next.next:
            cur = pre.next
            post = pre.next.next

            # pre,cur,post对应最左,中间的,最右边的节点
            cur.next = post.next
            post.next = cur
            pre.next = post

            cur = cur.next.next
        return res.next
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容