Leetcode链表刷题之:24.两两交换链表中的节点
发布日期:2022-02-05 22:03:45 浏览次数:1 分类:技术文章

本文共 1319 字,大约阅读时间需要 4 分钟。

题目描述:

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

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

示例 1:

输入:head = [1,2,3,4]
输出:[2,1,4,3]
示例 2:

输入:ead = []

输出:[]
示例 3:

输入:head = [1]

输出:[1]

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs
 

解题思路及代码:

这道题目总体思路和之前的25题:K个一组旋转链表完全一致,只是把K设置成了2而已,解题思路依旧是:

1.先完成逆转2个一组的链表的方法;

2.接着在原始的链表中,进行两个一组的反转,直到遍历到链表的尾结点为止。

# Definition for singly-linked list.# class ListNode(object):#     def __init__(self, x):#         self.val = x#         self.next = Noneclass Solution(object):    # n=2即为反转两个结点    def Reverse2(self, head, n):        if n == 1:            return head        tail = head.next        p = self.Reverse2(head.next, n-1)        head.next = tail.next        tail.next = head        return p    # 需要找到待旋转结点的上一结点,调用Reverse2(),并且判断剩余长度是否满足两两反转    def Reverse(self, head):        p = head        n = 2        while p and n > 1:            n -= 1            p = p.next        if p == None:            return head        return self.Reverse2(head, 2)    def swapPairs(self, head):        """        :type head: ListNode        :rtype: ListNode        """        ret = ListNode(0, head)        p = ret        q = p.next        while 1:            p.next = self.Reverse(q)            if q == p.next:                break            p = q            q = p.next        return ret.next

运行结果:

 

转载地址:https://blog.csdn.net/lu_yunjie/article/details/114583975 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Leetcode链表刷题之:61.旋转链表
下一篇:Leetcode242-有效的字母异位词

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月07日 06时29分20秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章