タイトル説明
リンクリスト内の特定の(非終了)ノードを削除する関数を記述してください。削除が必要なノードのみが提供されます。
リンクリストがあります– head = [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つのノードが含まれています。
リンクリスト内のすべてのノードの値は一意です。
指定されたノードは終了ノードではなく、リンクリスト内の有効なノードである必要があります。
関数から結果を返さないでください。
言語:C言語
思考分析
- タイトルで削除する必要のあるノード、つまり、パラメーターを渡すときにヘッドが指定されないことに注意してください。
- 方向性のある思考に邪魔されないでください。方向性のある思考に従うと、削除する必要のあるノードの前のノードを見つける方法を確実に考えることができます。前のノードのポインタフィールドが、必要な次のノードを指すようにします。削除してからノードを削除します
- 実際のアイデアは非常に単純で、2行のコードを実行できます。簡単に言えば、削除する必要のあるノードの次のノードがそれ自体をカバーし、次のノードを指すようにします。
コード
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
void deleteNode(struct ListNode* node) {
node->val=node->next->val;
node->next=node->next->next;
}
運転結果