Given a linked list, swap every two adjacent nodes and return its head.
You may not modify the values in the list’s nodes, only nodes itself may be changed.
Example:
Given 1->2->3->4, you should return the list as 2->1->4->3.
# 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 head == None or head.next == None:
return head
left = head
pre = head
cur = head.next
if (pre == head):
right = cur.next
cur.next = pre
head = cur
left = pre
pre = right
left.next = pre
if (pre==None):
return head
cur = pre.next
while(cur):
right = cur.next
cur.next = pre
left.next = cur
pre.next = right
left = pre
pre = right
if (pre==None):
return head
cur = pre.next
return head
大多数的链表题都是默认没有头结点的,所有说在涉及链表的修改问题,往往在第一个结点处需要特殊处理。为方便统一处理,可以自己进行加一个头结点。
class Solution:
def swapPairs(self, head: ListNode) -> ListNode:
#边界情况
if head == None or head.next == None:
return head
Node = ListNode(-1) #自己加一个头结点
Node.next = head
left = Node
pre = head
cur = head.next
while(cur):
right = cur.next
cur.next = pre
left.next = cur
pre.next = right
left = pre
pre = right
if (pre==None):
return Node.next
cur = pre.next
return Node.next