説明:アイデアは、意味を表現するために、擬似コードで書かれています。
まず、ヴァルに等しいノードのリストを削除
CURは、2つのノードとPREV(ノードCURの前駆体)を必要とする
、リスト全体を横断するように、所与のValを比較し
、それらが等しい場合:prev.next = cur.next;
等しくない場合:CUR = cur.next。
第二に、指定されたPOS挿入した後、削除ノードが
挿入されている:pos.next =ノードと
node.next = pos.next;
削除:pos.next = pos.next.next
コードは以下の通りであります:
`` `クラスノード{
int型のval;
ノードの横= NULL;
Node(int val) {
this.val = val;
}
public String toString() {
return String.format("Node(%d)", val);
}
}
{ソリューションクラス
パブリックremoveElementsノード(ノードヘッド、INTヴァル){
ノード結果= NULL;
ノード最終= NULL; //は、最後の現在の結果のノードを記録します
Node cur = head;
while (cur != null) {
if (cur.val == val) {
cur = cur.next;
continue;
}
Node next = cur.next;
cur.next = null;
if (result == null) {
result = cur;
} else {
last.next = cur;
}
last = cur;
cur = next;
}
return result;
}
}
パブリッククラスMyLinkedList {
パブリック静的無効メイン(文字列[] args){
ノードヘッド=新しいノード(1)。
head.next =新しいノード(2)。
head.next.next =新しいノード(3); //のPOS
head.next.next.next =新しいノード(4)。
Node pos = head.next.next;
pushAfter(pos, 100);//在pos之后入100
// 1, 2, 3, 100, 4
}
private static void pushAfter(Node pos, int val) {
Node node = new Node(val);
node.next = pos.next;
pos.next = node;
}
private static void popAfter(Node pos) {
pos.next = pos.next.next;
}
}