美文网首页算法学习打卡计划
leetcode第二十四题 ——交换链表元素顺序

leetcode第二十四题 ——交换链表元素顺序

作者: 不分享的知识毫无意义 | 来源:发表于2019-11-30 16:05 被阅读0次

    1.题目

    原题:

    给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

    例子:

    给定 1->2->3->4, 你应该返回 2->1->4->3
    

    2.解析

    这道题刚开始是没读懂题意,还以为是给定两个位置让我交换链表元素,后来仔细看了一下是两两交换,从头开始的,这个题其实考的是链表的操作,这属于链表一系列题,我们先来看一下链表的知识点。

    • 链表一般要定义一个值为0的head,然后将next绑定到需要的链表上。
    • 链表可以定义一个cur(游标)记录链表的当前位置。
    • 链表通过next属性形成链路,要改变链表也要改变next的指向。
      这道题的思路,本质就是交换
    • 交换两个节点,涉及两个next属性,如果有一个next为空,这个就无法交换,因此设置while循环的条件为cur.next或者cur.next.next不为空。
    • 定义好交换的两个位置以及next,做好交换工作,然后迭代游标到不满足while条件。

    3.python代码

    class Solution:
        def swapPairs(self, head: ListNode) -> ListNode:
            if not head:
                return head
            cur = ListNode(0)
            cur.next = head
            first = cur
            while cur.next and cur.next.next:
                n1 = cur.next
                n2 = n1.next
                nxt = n2.next
                n1.next = nxt
                n2.next = n1
                cur.next = n2
                cur = n1
            return first.next
    

    相关文章

      网友评论

        本文标题:leetcode第二十四题 ——交换链表元素顺序

        本文链接:https://www.haomeiwen.com/subject/wqhywctx.html