[leetcode] 24. Swap Nodes in Pairs @ python

版权声明:版权归个人所有,未经博主允许,禁止转载 https://blog.csdn.net/danspace1/article/details/86635681

原题

Given a linked list, swap every two adjacent nodes and return its head.

Example:

Given 1->2->3->4, you should return the list as 2->1->4->3.
Note:

Your algorithm should use only constant extra space.
You may not modify the values in the list’s nodes, only nodes itself may be changed.

解法

迭代法. 构造一个虚拟节点dummy指向head, 然后每两个节点一组, 交换节点, 并将p指向交换后的节点, 最后更新p和head.
Time: O(n/2)
Space: O(1)

代码

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def swapPairs(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        dummy = p =  ListNode(0)
        dummy.next = head
        while head and head.next:
            # swap nodes
            temp = head.next
            head.next = temp.next
            temp.next = head
            p.next = temp
            # update pointers
            head = head.next
            p = temp.next
            
        return dummy.next

猜你喜欢

转载自blog.csdn.net/danspace1/article/details/86635681