リンクリスト内の特定の(非終了)ノードを削除する関数を記述してください。関数に渡される唯一のパラメーターは、削除されるノードです。
リンクリストがあります– 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つのノードが含まれています。
リンクリスト内のすべてのノードの値は一意です。
指定されたノードは終了ノードではなく、リンクリスト内の有効なノードである必要があります。
関数から結果を返さないでください。
ソース:LeetCode(LeetCode)
リンク:https ://leetcode-cn.com/problems/delete-node-in-a-linked-list
著作権はLeetCodeが所有しています。商用の再版については、公式の承認に連絡してください。非商用の再版については、出典を示してください。
アイデア:この質問の冒頭で、値が1つしかないため、前の値を見つけて、指定した値を削除するという考えでした。その結果、しばらく探したところ、頭が入らないことがわかりました。 。しばらく唖然としたので見に行きました。問題解決の結果、頭の体操問題解決があります。これは確かに新しいアイデアであり、時間計算量も低いです。唯一の欠点は不利な点ではありませんが、それがテールノードになることはできません。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public void deleteNode(ListNode node) {
node.val = node.next.val;
node.next = node.next.next;
}
}