若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。
If you like this post, please click the ads on the blog or buy me a coffee. Thank you very much.
題目原文描述 https://leetcode.com/problems/swap-nodes-in-pairs/
中文描述
給定一個鏈結串列(linked list),將兩個相鄰節點交換後回傳開頭的節點。注意不得修改節點內的值。
範例一:
輸入 head = [1, 3, 5, 7]
輸出 [3, 1, 7, 5]
解法:
用一個變數 t 作為交換相鄰兩個節點的暫時替代空間,用來交換第一個節點 head 與 第二個節點head.next 。依照下列步驟來交換相鄰的兩個節點:
- t 先設定為 head.next。
- head.next 設定為 swap(t.next)。
- t.next 設定為 head。
Python Code
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:
if head == None or head.next == None: # 目前節點或下一個節點為 None
return head # 傳回 head
t = head.next # 節點 t 指向目前的相鄰的第二個節點
head.next = self.swapPairs(t.next) # 目前節點指向下一組交換完的第一個節點
t.next = head # 節點 t 指向目前的相鄰的第一個節點
return t # 傳回相鄰的第一個節點
C++ Code
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
if( head == nullptr || head->next == nullptr) // 目前節點或下一個節點為 null
return head; // 回傳 head
ListNode *t = head->next; // 節點 t 指向目前的相鄰的第二個節點
head->next = swapPairs(t->next); // 目前節點指向下一組交換完的第一個節點
t->next = head; // 節點 t 指向目前的相鄰的第一個節點
return t; // 傳回相鄰的第一個節點
}
};
沒有留言:
張貼留言