【Leetcode】24. 两两交换链表中的节点
题目
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
思路
借助堆栈,每两个入栈。注意最后要判断结果是None还是head,否则会出现环链表
代码
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def swapPairs(self, head: ListNode) -> ListNode:
if (not (head and head.next)):
return head
curr = ListNode(None)
ans = curr
sta = []
while(head and head.next):
sta.append(head)
head = head.next
sta.append(head)
head = head.next
curr.next = sta.pop()
curr = curr.next
curr.next = sta.pop()
curr = curr.next
# input()
if (head):
curr.next = head
else:
curr.next = None
return ans.next