LeetCode_237.チェーンテーブルのノードを削除する


タイトル
チェーンテーブルで指定された(末尾ではない)ノードを削除できるように関数を作成してください.削除を要求されたノードのみが指定されます.入力値は、ヘッダノードではなく削除対象ノードであり、関数は値を返しません.
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
void deleteNode(struct ListNode* node) {

}

既存のチェーンテーブル-head=[4,5,1,9]は、4->5->1->9と表すことができます.
例1:
入力:head=[4,5,1,9],node=5出力:[4,1,9]解釈:チェーンテーブルの値が5の2番目のノードが与えられると、あなたの関数が呼び出された後、チェーンテーブルの歪みは4->1->9となる.
例2:
入力:head=[4,5,1,9],node=1出力:[4,5,9]解釈:チェーンテーブルの値が1の3番目のノードが与えられると、あなたの関数が呼び出された後、チェーンテーブルは4->5->9に歪みます.
説明:
チェーンテーブルには少なくとも2つのノードが含まれています.チェーンテーブル内のすべてのノードの値は一意です.与えられたノードは非末尾ノードであり、チェーンテーブルの有効なノードであるに違いない.関数から結果を返さないでください.
問題解
考え方:次のノードの情報を直接現在のノードを上書きすればよい.note:ポインタが指す空間の内容を変更する場合は、「*」号を付け、付けないとポインタが格納しているアドレスだけを変更することに注意します.実際にはnode->nextが削除され、削除前に現在のノードに情報が存在するだけであることに注意してください.
void deleteNode(struct ListNode* node) {
    struct ListNode *delete = node->next;
    *node = *delete;
    free(delete);
}

難しそうに見えますが、実は簡単で、前のノードのnext値を変えることができず、現在のノードを変えることができません.頭の穴を開けて
LeetCode練習問題まとめ