updated linked-list-3 with position delete

master
Furkan Türkal 7 years ago
parent 3d001ad069
commit 414dbf08f0

@ -56,25 +56,25 @@ func Push(head_ref **Node, new_data int) {
*head_ref = new_node *head_ref = new_node
} }
func DeleteNode(head_ref **Node, key int) { func DeleteNodeWithData(head_ref **Node, delete_data int) {
//Store head node //Store head node
temp := *head_ref temp := *head_ref
prev := *head_ref prev := *head_ref
//If head node itself holds the key to be deleted //If head node itself holds the delete_data to be deleted
if(temp != nil && temp.data == key){ if(temp != nil && temp.data == delete_data){
*head_ref = temp.next; *head_ref = temp.next;
temp = nil temp = nil
return return
} }
//Search for the key to be deleted, keep track of the previous node as we need to change prev->next //Search for the delete_data to be deleted, keep track of the previous node as we need to change prev->next
for(temp != nil && temp.data != key){ for(temp != nil && temp.data != delete_data){
prev = temp prev = temp
temp = temp.next temp = temp.next
} }
// If key was not present in linked list // If delete_data was not present in linked list
if(temp == nil){ if(temp == nil){
return return
} }
@ -85,6 +85,45 @@ func DeleteNode(head_ref **Node, key int) {
temp = nil temp = nil
} }
func DeleteNodeWithPosition(head_ref **Node, delete_position int){
//If LinkedList is empty
if(*head_ref == nil){
return
}
//Store head node
temp := *head_ref
//If head needs to be removed
if(delete_position == 0){
*head_ref = temp.next
temp = nil
return
}
//Find previous node of the node to be deleted
for i := 0; temp != nil && i < delete_position - 1; i++ {
temp = temp.next
}
//If position is more than number of nodes
if(temp == nil || temp.next == nil){
return
}
//Node temp->next is the node to be deleted, Store pointer to the next of node to be deleted
next := temp.next.next
//Unlink the node from linked list
temp.next = nil
//Unlink the deleted node from list
temp.next = next
}
//This function prints contents of linked list starting from the given node //This function prints contents of linked list starting from the given node
func printList(n *Node){ func printList(n *Node){
for n != nil { for n != nil {
@ -106,11 +145,15 @@ func main() {
Push(&head, 2) Push(&head, 2)
Push(&head, 8)
fmt.Println("Created LinkedList is: ") fmt.Println("Created LinkedList is: ")
printList(head) printList(head)
DeleteNode(&head, 1) DeleteNodeWithData(&head, 1)
DeleteNodeWithPosition(&head, 4)
fmt.Println("LinkedList after Deletion of 1: ") fmt.Println("LinkedList after Deletion of 1: ")

Loading…
Cancel
Save