美文网首页
024-swap nodes in pairs

024-swap nodes in pairs

作者: 英武 | 来源:发表于2019-04-15 17:37 被阅读0次

swap nodes in pairs

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

For example,
Given 1->2->3->4, you should return the list as 2->1->4->3.

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

# 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 = ListNode(0)
        dummy.next = head
        pre, curr = dummy, head
        while curr and curr.next:       
            # swap node between curr and curr.next
            pre.next = curr.next        
            curr.next = pre.next.next   
            pre.next.next = curr        
            # go over 2 nodes
            pre, curr = curr,curr.next  
        return dummy.next

还有一个递归方法:

# 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
        """
        if head == None or head.next == None:
            return head
        new_head = head.next
        head.next = self.swapPairs(head.next.next)
        new_head.next = head
        return new_head

上面的那个交换值的方法略绕,还有看到网友写的一个更简单的方法,非常好理解:

# 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 = ListNode(0)  
        dummy.next = head  
        cur = dummy  
        try:  
            while True:  
                pre, cur, nxt = cur, cur.next, cur.next.next  
                # change the position of cur and nxt  
                pre.next, cur.next, nxt.next = nxt, nxt.next, cur  
                # now cur is in the third place  
        except:  
            return dummy.next  

再来一个最快速的方法:

# 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
        """
        if not head or not head.next:
            return head
        next_pos = head.next.next
        rev = self.swapPairs(next_pos)
        first = head
        second = head.next
        second.next = first
        first.next = rev
        return second

相关文章

网友评论

      本文标题:024-swap nodes in pairs

      本文链接:https://www.haomeiwen.com/subject/cdrpwqtx.html