给定一个单链表和一个位置,删除给定位置的链表节点。
null
例子:
Input: position = 1, Linked List = 8->2->3->1->7Output: Linked List = 8->3->1->7Input: position = 0, Linked List = 8->2->3->1->7Output: Linked List = 2->3->1->7
如果要删除的节点是根节点,只需将其删除即可。要删除中间节点,必须有一个指向要删除节点之前的节点的指针。因此,如果位置不是零,我们运行一个循环position-1次,得到一个指向前一个节点的指针。
下面是上述想法的实施。
C++
// A complete working C++ program to delete // a node in a linked list at a given position #include <iostream> using namespace std; // A linked list node class Node { public : int data; Node* next; }; // Given a reference (pointer to pointer) to // the head of a list and an int inserts a // new node on the front of the list. void push(Node** head_ref, int new_data) { Node* new_node = new Node(); new_node->data = new_data; new_node->next = (*head_ref); (*head_ref) = new_node; } // Given a reference (pointer to pointer) to // the head of a list and a position, deletes // the node at the given position void deleteNode(Node** head_ref, int position) { // If linked list is empty if (*head_ref == NULL) return ; // Store head node Node* temp = *head_ref; // If head needs to be removed if (position == 0) { // Change head *head_ref = temp->next; // Free old head free (temp); return ; } // Find previous node of the node to be deleted for ( int i = 0; temp != NULL && i < position - 1; i++) temp = temp->next; // If position is more than number of nodes if (temp == NULL || temp->next == NULL) return ; // Node temp->next is the node to be deleted // Store pointer to the next of node to be deleted Node* next = temp->next->next; // Unlink the node from linked list free (temp->next); // Free memory // Unlink the deleted node from list temp->next = next; } // This function prints contents of linked // list starting from the given node void printList(Node* node) { while (node != NULL) { cout << node->data << " " ; node = node->next; } } // Driver code int main() { // Start with the empty list Node* head = NULL; push(&head, 7); push(&head, 1); push(&head, 3); push(&head, 2); push(&head, 8); cout << "Created Linked List: " ; printList(head); deleteNode(&head, 4); cout << "Linked List after Deletion at position 4: " ; printList(head); return 0; } // This code is contributed by premsai2030 |
C
// Simple C code to delete node at particular position #include<stdio.h> #include<stdlib.h> void insert( int ); void display_List(); void delete ( int ); struct node // Structure declaration { int data; struct node *next; // Self referral pointer }*head=NULL,*tail=NULL; // Initial value of Head and Tail pointer is NULL void delete ( int pos) { struct node *temp = head; // Creating a temporary variable pointing to head int i; if (pos==0) { printf ( "Element deleted is : %d" ,temp->data); head=head->next; // Advancing the head pointer temp->next=NULL; free (temp); // Node is deleted } else { for (i=0;i<pos-1;i++) { temp=temp->next; } // Now temp pointer points to the previous node of the node to be deleted struct node *del =temp->next; // del pointer points to the node to be deleted temp->next=temp->next->next; printf ( "Element deleted is : %d" ,del->data); del->next=NULL; free (del); // Node is deleted } printf ( "Updated Linked List is : " ); display_List(); return ; } void insert( int value) { struct node *newnode; // Creating a new node newnode = ( struct node *) malloc ( sizeof ( struct node)); // Allocating dynamic memory newnode->data = value; // Assigning value to newnode newnode->next = NULL; if (head==NULL) // Checking if List is empty { head = newnode; tail = newnode; } else // If not empty then... { tail->next=newnode; tail=newnode; // Updating the tail node with each insertion } return ; } void display_List() { struct node *temp; // Creating a temporary pointer to the structure temp=head; // temp points to head; while (temp!=NULL) { if (temp->next==NULL) { printf ( " %d->NULL" ,temp->data); } else { printf ( " %d->" ,temp->data); } temp=temp->next; // Traversing the List till end } printf ( "" ); return ; } // --Driver Code-- int main() { insert(10); insert(20); insert(30); insert(40); insert(50); insert(60); printf ( "--Created Linked List--" ); display_List(); printf ( "Linked List after deletion at position 0" ); delete (0); // List indexing starts from 0 printf ( "Linked List after deletion at position 2" ); delete (2); return 0; } // This code is contributed by Sanjeeban Mukhopadhyay. |
JAVA
// A complete working Java program to delete a node in a // linked list at a given position class LinkedList { Node head; // head of list /* Linked list Node*/ class Node { int data; Node next; Node( int d) { data = d; next = null ; } } /* Inserts a new Node at front of the list. */ public void push( int new_data) { /* 1 & 2: Allocate the Node & Put in the data*/ Node new_node = new Node(new_data); /* 3. Make next of new Node as head */ new_node.next = head; /* 4. Move the head to point to new Node */ head = new_node; } /* Given a reference (pointer to pointer) to the head of a list and a position, deletes the node at the given position */ void deleteNode( int position) { // If linked list is empty if (head == null ) return ; // Store head node Node temp = head; // If head needs to be removed if (position == 0 ) { head = temp.next; // Change head return ; } // Find previous node of the node to be deleted for ( int i = 0 ; temp != null && i < position - 1 ; i++) temp = temp.next; // If position is more than number of nodes if (temp == null || temp.next == null ) return ; // Node temp->next is the node to be deleted // Store pointer to the next of node to be deleted Node next = temp.next.next; temp.next = next; // Unlink the deleted node from list } /* This function prints contents of linked list starting from the given node */ public void printList() { Node tnode = head; while (tnode != null ) { System.out.print(tnode.data + " " ); tnode = tnode.next; } } /* Driver program to test above functions. Ideally this function should be in a separate user class. It is kept here to keep code compact */ public static void main(String[] args) { /* Start with the empty list */ LinkedList llist = new LinkedList(); llist.push( 7 ); llist.push( 1 ); llist.push( 3 ); llist.push( 2 ); llist.push( 8 ); System.out.println( "Created Linked list is: " ); llist.printList(); llist.deleteNode( 4 ); // Delete node at position 4 System.out.println( "Linked List after Deletion at position 4: " ); llist.printList(); } } |
Python3
# Python program to delete a node in a linked list # at a given position # Node class class Node: # Constructor to initialize the node object def __init__( self , data): self .data = data self . next = None class LinkedList: # Constructor to initialize head def __init__( self ): self .head = None # Function to insert a new node at the beginning def push( self , new_data): new_node = Node(new_data) new_node. next = self .head self .head = new_node # Given a reference to the head of a list # and a position, delete the node at a given position #This delete function code is contributed by Arabin Islam def deleteNode( self , position): if self .head is None : return if position = = 0 : self .head = self .head. next return self .head index = 0 current = self .head prev = self .head temp = self .head while current is not None : if index = = position: temp = current. next break prev = current current = current. next index + = 1 prev. next = temp return prev # Utility function to print the LinkedList def printList( self ): temp = self .head while (temp): print ( " %d " % (temp.data),end = " " ) temp = temp. next # Driver program to test above function llist = LinkedList() llist.push( 7 ) llist.push( 1 ) llist.push( 3 ) llist.push( 2 ) llist.push( 8 ) print ( "Created Linked List: " ) llist.printList() llist.deleteNode( 4 ) print ( "Linked List after Deletion at position 4: " ) llist.printList() # This code is contributed by Nikhil Kumar Singh(nickzuck_007) |
C#
// A complete working C# program to delete // a node in a linked list at a given position using System; class GFG { // Head of list Node head; // Linked list Node public class Node { public int data; public Node next; public Node( int d) { data = d; next = null ; } } // Inserts a new Node at front of the list. public void Push( int new_data) { /* 1 & 2: Allocate the Node & Put in the data*/ Node new_node = new Node(new_data); /* 3. Make next of new Node as head */ new_node.next = head; /* 4. Move the head to point to new Node */ head = new_node; } // Given a reference (pointer to pointer) // to the head of a list and a position, // deletes the node at the given position void deleteNode( int position) { // If linked list is empty if (head == null ) return ; // Store head node Node temp = head; // If head needs to be removed if (position == 0) { // Change head head = temp.next; return ; } // Find previous node of the node to be deleted for ( int i = 0; temp != null && i < position - 1; i++) temp = temp.next; // If position is more than number of nodes if (temp == null || temp.next == null ) return ; // Node temp->next is the node to be deleted // Store pointer to the next of node to be deleted Node next = temp.next.next; // Unlink the deleted node from list temp.next = next; } // This function prints contents of // linked list starting from the // given node public void printList() { Node tnode = head; while (tnode != null ) { Console.Write(tnode.data + " " ); tnode = tnode.next; } } // Driver code public static void Main(String[] args) { // Start with the empty list GFG llist = new GFG(); llist.Push(7); llist.Push(1); llist.Push(3); llist.Push(2); llist.Push(8); Console.WriteLine( "Created Linked list is: " ); llist.printList(); // Delete node at position 4 llist.deleteNode(4); Console.WriteLine( "Linked List after " + "Deletion at position 4: " ); llist.printList(); } } // This code is contributed by Rajput-Ji |
Javascript
<script> // A complete working javascript program to // delete a node in a linked list at a // given position // head of list var head; /* Linked list Node */ class Node { constructor(val) { this .data = val; this .next = null ; } } /* Inserts a new Node at front of the list. */ function push(new_data) { /* * 1 & 2: Allocate the Node & Put in the data */ var new_node = new Node(new_data); /* 3. Make next of new Node as head */ new_node.next = head; /* 4. Move the head to point to new Node */ head = new_node; } /* * Given a reference (pointer to pointer) to the * head of a list and a position, * deletes the node at the given position */ function deleteNode(position) { // If linked list is empty if (head == null ) return ; // Store head node var temp = head; // If head needs to be removed if (position == 0) { // Change head head = temp.next; return ; } // Find previous node of the node to be deleted for (i = 0; temp != null && i < position - 1; i++) temp = temp.next; // If position is more than number of nodes if (temp == null || temp.next == null ) return ; // Node temp->next is the node to be deleted // Store pointer to the next of node to be deleted var next = temp.next.next; // Unlink the deleted node from list temp.next = next; } /* * This function prints contents of linked * list starting from the given node */ function printList() { var tnode = head; while (tnode != null ) { document.write(tnode.data + " " ); tnode = tnode.next; } } /* * Driver program to test above functions. * Ideally this function should be in a * separate user class. It is kept here * to keep code compact */ /* Start with the empty list */ push(7); push(1); push(3); push(2); push(8); document.write( "Created Linked list is: <br/>" ); printList(); // Delete node at position 4 deleteNode(4); document.write( "<br/>Linked List after " + "Deletion at position 4: <br/>" ); printList(); // This code is contributed by todaysgaurav </script> |
输出:
--Created Linked List-- 10-> 20-> 30-> 40-> 50-> 60->NULL Linked List after deletion at position 0Element deleted is : 10Updated Linked List is : 20-> 30-> 40-> 50-> 60->NULLLinked List after deletion at position 2Element deleted is : 40Updated Linked List is : 20-> 30-> 50-> 60->NULL
幸亏 何曼斯·库马 建议最初的解决方案。如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写评论
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END