Leetcode - 1721. Swapping Nodes in a Linked List

想法:

設置兩個 pointer 分別為 node1 和 node2

node1 為由前面往後數 n 個

node2 為由後面往前數 n 個


1. 先定位好兩個 pointer

先定位好 node1,再來定位好 node2

2. 進行交換

原本想說要把兩個 pointer 交換,但要考慮到太多問題一直寫不出來,後來發現其實直接交換值就好了


* 如果 list 中只有一個節點,就算交換了也會是原本的樣子,所以直接回傳


Code:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
typedef struct ListNode Node;

Node* swapNodes(Node* head, int k){

    if(head->next == NULL){
        return head;
    }
   
    Node *cur, *node1, *node2;
    node1 = NULL;
    node2 = NULL;

    cur = head;
    int i = 0;
    for(i = 0; i < k-1; i++){
        cur = cur->next;
    }
    node1 = cur;

    cur = head;
    for(i = 0; i < k; i++){
        cur = cur->next;
    }
    node2 = head;
    while(cur){
        node2 = node2->next;
        cur = cur->next;
    }
    if(node1){
        printf("node1: %d\n", node1->val);
    }
    if(node2){
        printf("node2: %d\n", node2->val);
    }
    int tmp;
   
    tmp = node1->val;
    node1->val = node2->val;
    node2->val = tmp;

    return head;
}

花花酱 LeetCode 1721. Swapping Nodes in a Linked List

留言

這個網誌中的熱門文章

Formal Verification(正規驗證)介紹和如何使用 SVA(System Verilog Assertion) 做驗證

Quartus Qsys + Nios II 入門使用

Quartus Qsys + Nios II + SDRAM 進階使用