美文网首页算法学习打卡计划
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