两两交换链表中的节点
2016-05-02 10:42
323 查看
题目描述:给一个链表,两两交换其中的节点,然后返回交换后的链表。
样例:给出 1->2->3->4, 你应该返回的链表是 2->1->4->3。
交换节点这个事,对摘链和链接的操作要求是比较高的。
题目本身的意思很简单了,我们在这里可以采用两个指针first和second,分别指向每次要交换的两个节点,交换之后,使得second在first前面。
为了方便操作,还是老方法,在头结点前面增加一个dummy节点。
代码可以给出了:
# 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):
dummy = ListNode(-1)
# pre始终指向要交换的两个节点的前驱
pre = dummy
first = head
second = head.next
while second:
# 以下三行为交换过程
pre.next = second
first.next = second.next
second.next = first
# 将pre前移,为下一次交换准备
pre = first
# 调整first和second,指向下一次要交换的两个节点
first = first.next
second = first.next if first else None
return dummy.next
# Write your code here需要特别注意的是25行对于second的处理,因为很有可能first已经为空了,而空值是没有next这个属性的。
另外,以second为循环条件,也能很好的处理奇数长度链表的两两交换问题。
样例:给出 1->2->3->4, 你应该返回的链表是 2->1->4->3。
交换节点这个事,对摘链和链接的操作要求是比较高的。
题目本身的意思很简单了,我们在这里可以采用两个指针first和second,分别指向每次要交换的两个节点,交换之后,使得second在first前面。
为了方便操作,还是老方法,在头结点前面增加一个dummy节点。
代码可以给出了:
# 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):
dummy = ListNode(-1)
# pre始终指向要交换的两个节点的前驱
pre = dummy
first = head
second = head.next
while second:
# 以下三行为交换过程
pre.next = second
first.next = second.next
second.next = first
# 将pre前移,为下一次交换准备
pre = first
# 调整first和second,指向下一次要交换的两个节点
first = first.next
second = first.next if first else None
return dummy.next
# Write your code here需要特别注意的是25行对于second的处理,因为很有可能first已经为空了,而空值是没有next这个属性的。
另外,以second为循环条件,也能很好的处理奇数长度链表的两两交换问题。
相关文章推荐
- [C/C++]反转链表
- C#实现基于链表的内存记事本实例
- C#模拟链表数据结构的实例解析
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- C++利用静态成员或类模板构建链表的方法讲解
- C++实现简单的学生管理系统
- Linux内核链表实现过程
- C++链表倒序实现方法
- C#通过链表实现队列的方法
- C#实现的简单链表类实例
- 找出链表倒数第n个节点元素的二个方法
- Java数据结构之简单链表的定义与实现方法示例
- Java模拟有序链表数据结构的示例
- C语言单循环链表的表示与实现实例详解
- C++实现的链表类实例
- PHP小教程之实现链表
- PHP中模拟链表和链表的基本操作示例
- C语言双向链表的表示与实现实例详解
- js链表操作(实例讲解)
- C语言实现输出链表中倒数第k个节点