[Leetcode]24.|[Leetcode]24. 两两交换链表中的节点
题目描述
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
【[Leetcode]24.|[Leetcode]24. 两两交换链表中的节点】你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
我的方法:
看起来并不算很难,重点应该在于理顺整个处理流程。
- 将节点分为两两一组,每次处理两个节点。
- 对于头两个节点,交换两个节点后,只需要考虑整体的之后节点即可。
- 对于中间的节点,交换两个节点后,要考虑整体之前的节点以及整体之后的节点。
- 如果最终有节点落单,则不进行交换操作。
# Definition for singly-linked list.
# class ListNode(object):
#def __init__(self, x):
#self.val = x
#self.next = Noneclass Solution(object):
def swapPairs(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if head is None or head.next is None:
return head
# 如果长度在2以上
p=head.next
pre=None
# 遍历链表
while head:
# 两两节点为一组,进行处理
a=head
b=a.next
if b:
head=b.next #链表要持续移动
#交换两个节点
if pre:
pre.next=b
b.next=a
else:
b.next=a
a.next=None #不要形成环链
pre=a
else:
head=b#链表要持续移动
if pre:
pre.next=a
return p
别人的方法:
看了下别人的方法,确实很简洁。看起来是用的递归,没错,这个问题用递归解决很适合。
class Solution(object):
def swapPairs(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if not head or not head.next:
return headchead = self.swapPairs(head.next.next)
hnext = head.next
head.next, hnext.next = chead, head
return hnext
推荐阅读
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- leetcode|leetcode 92. 反转链表 II
- 二叉树路径节点关键值和等于目标值(LeetCode--112&LeetCode--113)
- LeetCode算法题-11.|LeetCode算法题-11. 盛最多水的容器(Swift)
- LeetCode(03)Longest|LeetCode(03)Longest Substring Without Repeating Characters
- Leetcode|Leetcode No.198打家劫舍
- [leetcode数组系列]1两数之和
- 数据结构和算法|LeetCode 的正确使用方式
- leetcode|今天开始记录自己的力扣之路
- LeetCode|LeetCode 876. 链表的中间结点