給定一個(gè)鏈表,兩兩交換其中相鄰的節(jié)點(diǎn),并返回交換后的鏈表。
你不能只是單純的改變節(jié)點(diǎn)內(nèi)部的值,而是需要實(shí)際的進(jìn)行節(jié)點(diǎn)交換。
示例:
給定 1->2->3->4, 你應(yīng)該返回 2->1->4->3.
思路--迭代
初始化一個(gè)啞結(jié)點(diǎn),指向頭結(jié)點(diǎn)
初始化一個(gè)preNode,用以表示置換節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn)
遍歷鏈表節(jié)點(diǎn):
從head和head.next節(jié)點(diǎn)開始執(zhí)行交換,交換過程如下圖所示
交換后,重置head 和 prev_node用以下次繼續(xù)交換

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:
# 要交換的節(jié)點(diǎn)
firstNode = head
secondNode = head.next
# 交換
preNode.next = secondNode
firstNode.next = secondNode.next
secondNode.next = firstNode
# 重置head 和 prev_node用以下次繼續(xù)交換
preNode = firstNode
head = firstNode.next
return newNode.next
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/swap-nodes-in-pairs
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。