単独リンクリスト内のノードを削除するには
ノードリストを削除するには
次のようにリスト内のノードを削除するには:
ノードの前に削除するノードを見つけ1
2.ノードに次のノードのノードの前面
3.削除されたノードのメモリが解放されます
public class deleteNode
{
Node head;
class Node
{
int data;
Node next;
Node(int d)
{
data = d;
next = null;
}
}
void deleteNode(int key)
{
// Store head node
Node temp = head, prev = null;
// If head node itself holds the key to be deleted
if (temp != null && temp.data == key)
{
head = temp.next; // Changed head
return;
}
// Search for the key to be deleted, keep track of the
// previous node as we need to change temp.next
while (temp != null && temp.data != key)
{
prev = temp;
temp = temp.next;
}
// If key was not present in linked list
if (temp == null) return;
// Unlink the node from linked list
prev.next = temp.next;
}
public void push(int new_data)
{
Node new_node = new Node(new_data);
new_node.next = head;
head = new_node;
}
public void printList()
{
Node tnode = head;
while (tnode!=null)
{
System.out.println(tnode.data);
tnode = tnode.next;
}
}
public static void main(String[] args)
{
deleteNode llist = new deleteNode();
llist.push(7);
llist.push(1);
llist.push(3);
llist.push(2);
System.out.println("\nCreated Linked list is:");
llist.printList();
llist.deleteNode(1); // Delete node at position 4
System.out.println("\nLinked List after Deletion at position 4:");
llist.printList();
}
}
今度は、leetcodeの質問を考えてみましょう:
リンクされたリストの237ノードの削除
そのノードへのアクセスのみ与えられ、単独リンクリストに(尾を除く)のノードを削除する機能を記述します。
リンクリストを考える-ヘッド= [4,5,1,9] 、以下のようになります。
例1:
入力:ヘッド= [4,5,1,9]は、ノードは、= 5
出力:[4,1,9]
説明:あなたは値5と第2のノードが与えられ、リンクされたリストは、となるべき4 - > 1 - > 9あなたの関数を呼び出した後。
例2:
入力:ヘッド= [4,5,1,9]は、ノード= 1
出力:[4,5,9]
説明:あなたは値1と第3のノードが与えられ、リンクされたリストは、となるべき4 - > 5 - > 9あなたの関数を呼び出した後。
class Solution {
public void deleteNode(ListNode node) {
node.val = node.next.val;
node.next = node.next.next;
}
}
この質問では、現在のノードにはパッシングはありません。ノードは次のノードが現在のノードであることを知っているので。限り、我々は現在のノードの次のノード情報を現在のノードのすべての情報を交換するように、我々はまた、変装、削除ノードを完了しました。
参考文献: