算法-目录
题目来源:Leetcode 24. 两两交换链表中的节点
解法一、递归[K]
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def swapPairs(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if not head or not head.next:
return head
node1, node2 = head, head.next
tmp = self.swapPairs(node2.next) #交换node1、node2,然后与node2的后面连接输出成新的
node2.next = node1
node1.next = tmp
return node2
解法二、非递归
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution(object):
def swapPairs(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if not head or not head.next:
return head
dummy_node=ListNode(-1) #不涉及增删节点的用这个
dummy_node.next=head
pre=dummy_node
while pre.next and pre.next.next:
cur=pre.next
tmp=pre.next.next
pre.next=tmp
cur.next=tmp.next
tmp.next=cur
pre=cur
return dummy_node.next