24. 两两交换链表中的节点

2020-06-30  本文已影响0人  周英杰Anita

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

示例:

给定 1->2->3->4, 你应该返回 2->1->4->3.

思路--迭代

初始化一个哑结点,指向头结点
初始化一个preNode,用以表示置换节点的前一个节点
遍历链表节点:
从head和head.next节点开始执行交换,交换过程如下图所示
交换后,重置head 和 prev_node用以下次继续交换
image.png

python3解法--迭代

# 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:
        if not head:return None
        newNode = ListNode(-1)
        newNode.next = head
        preNode = newNode
        while head and head.next:
            # 要交换的节点
            firstNode = head
            secondNode = head.next
            # 交换
            preNode.next = secondNode
            firstNode.next = secondNode.next
            secondNode.next = firstNode
            # 重置head 和 prev_node用以下次继续交换
            preNode = firstNode
            head = firstNode.next
        return newNode.next

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

上一篇下一篇

猜你喜欢

热点阅读