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
浙公网安备 33010602011771号