LintCode Python 简单级题目 451.两两交换链表中的节点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LintCode Python 简单级题目 451.两两交换链表中的节点相关的知识,希望对你有一定的参考价值。

题目描述:

 

给一个链表,两两交换其中的节点,然后返回交换后的链表。

 

样例

给出 1->2->3->4, 你应该返回的链表是 2->1->4->3

 

挑战 

你的算法只能使用常数的额外空间,并且不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

 

 

题目分析:

你的算法只能使用常数的额外空间,即不能新建链表;

并且不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

创建三个指针:

  head指向开始交换的节点的上一个节点

  n1指向需要交换的第一个节点,即head.next

  n2指向需要交换的第二个节点,即head.next.next

循环链表,通过head不断交换n1/n2位置即可。

 

源码:

 

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

class Solution:
    # @param head, a ListNode
    # @return a ListNode
    def swapPairs(self, head):
        # Write your code here
        new = ListNode(0)
        new.next = head
        head = new
        
        while head.next is not None and head.next.next is not None:
            n1 = head.next
            n2 = head.next.next
            # 交换n1、n2
            head.next = n2
            n1.next = n2.next
            n2.next = n1
            # 交换后的链表,n1在n2后面,将head指向n1
            head = n1
        
        return new.next
        
    # 不创建链表头是否可行?lintcode报超时。
    def _swapPairs(self, head):
        # Write your code here
        if head is None or head.next is None: 
            return head
            
        new = head
        n1 = head
        n2 = head.next
        while n1.next is not None and n2.next is not None:
            n1.next = n2.next
            n2.next = n1
            n1 = n1.next
        return new

 

以上是关于LintCode Python 简单级题目 451.两两交换链表中的节点的主要内容,如果未能解决你的问题,请参考以下文章

LintCode Python 简单级题目 82.落单的数

LintCode Python 简单级题目 517.丑数

LintCode Python 简单级题目 373.奇偶分割数组

LintCode Python 简单级题目 423.有效的括号序列

LintCode Python 简单级题目 35.翻转链表

LintCode Python 简单级题目 39.恢复旋转排序数组