码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode 每日一题 24. 两两交换链表中的节点

时间:2020-05-06 11:45:10      阅读:60      评论:0      收藏:0      [点我收藏+]

标签:div   code   alt   img   width   inf   迭代   位置   png   

技术图片

迭代法

思路:

按顺序交换对应两个节点位置,交换前用一个节点充当要交换的节点的前驱,交换节点后更新前驱的位置。

代码:

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

class Solution:
    def swapPairs(self, head: ListNode) -> ListNode:
        start = ListNode(-1)
        start.next = head
        temp = start
        while temp.next and temp.next.next:
            first = temp.next
            second = temp.next.next
            first.next = second.next
            second.next = first
            temp.next = second
            temp = temp.next.next
        return start.next

递归法

思路:

从链表的头节点 head 开始递归,每次递归都负责交换一对节点。由 firstNode 和 secondNode 表示要交换的两个节点。下一次递归则是传递的是下一对需要交换的节点。若链表中还有节点,则继续递归。交换了两个节点以后,返回 secondNode,因为它是交换后的新头。在所有节点交换完成以后,我们返回交换后的头,实际上是原始链表的第二个节点。

代码:

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None
class Solution(object):
    def swapPairs(self, head: ListNode) -> ListNode:
        if not head or not head.next:
            return head
        first_node = head
        second_node = head.next
        first_node.next  = self.swapPairs(second_node.next)
        second_node.next = first_node
        return second_node

 

leetcode 每日一题 24. 两两交换链表中的节点

标签:div   code   alt   img   width   inf   迭代   位置   png   

原文地址:https://www.cnblogs.com/nilhxzcode/p/12835179.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!