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
网友评论