Skip to main content

Delete all node which is less than from right node of linked list in golang

Go program for Delete all node which is less than from right node of linked list. Here problem description and explanation.

package main
import "fmt"
/*
    Go program for
    delete nodes which have a greater 
    value on right side
*/
// Linked list node
type LinkNode struct {
	data int
	next * LinkNode
}
func getLinkNode(data int) * LinkNode {
	// return new LinkNode
	return &LinkNode {
		data,
		nil,
	}
}
type SingleLL struct {
	head * LinkNode
	tail * LinkNode
}
func getSingleLL() * SingleLL {
	// return new SingleLL
	return &SingleLL {
		nil,
		nil,
	}
}
// Add new Node at end of linked list 
func(this *SingleLL) addNode(data int) {
	var node * LinkNode = getLinkNode(data)
	if this.head == nil {
		this.head = node
	} else {
		// Append the node at last position
		this.tail.next = node
	}
	this.tail = node
}
// Display linked list element
func(this SingleLL) display() {
	if this.head == nil {
		return
	}
	var temp * LinkNode = this.head
	// iterating linked list elements
	for (temp != nil) {
		fmt.Print(" ", temp.data, " →")
		// Visit to next node
		temp = temp.next
	}
	fmt.Print(" NULL\n")
}
// This are perform the deletion operation 
// by using next upcoming higher node
func(this *SingleLL) deleteNode() {
	if this.head == nil {
		return
	}
	// Define some auxiliary variables
	var current * LinkNode = this.head
	var back * LinkNode = nil
	// Execute loop until the last node
	for (current != nil && current.next != nil) {
		if current.next.data > current.data {
			// When next node value is 
			// higher to current node.
			// Visit to next node
			current = current.next
			if back == nil {
				// When need to remove a head node 
				// change head node
				this.head = current
			} else {
				// Connect previous node to next node
				back.next = current
			}
		} else {
			back = current
			current = current.next
		}
	}
}
// Handle request to remove all node 
// which is less than next node
func(this *SingleLL) deleteByNextHigher() {
	if this.head == nil {
		fmt.Println("\n Empty Linked List")
		return
	}
	// Display given linked list
	// Before Delete 
	fmt.Println("\n Given Linked List : ")
	this.display()
	this.deleteNode()
	// Display resultant linked list
	// After delete
	fmt.Println(" After Delete Linked List : ")
	this.display()
}
func main() {
	var sll1 * SingleLL = getSingleLL()
	var sll2 * SingleLL = getSingleLL()
	var sll3 * SingleLL = getSingleLL()
	// First linked list
	//  1 → 2 → 5 → 4 → 3 → 6 → 7 → 8 → NULL
	sll1.addNode(1)
	sll1.addNode(2)
	sll1.addNode(5)
	sll1.addNode(4)
	sll1.addNode(3)
	sll1.addNode(6)
	sll1.addNode(7)
	sll1.addNode(8)
	// Second linked list 
	//  6 → 3 → 2 → NULL
	sll2.addNode(6)
	sll2.addNode(3)
	sll2.addNode(2)
	// Third linked list
	//  1 → 2 → 3 → NULL
	sll3.addNode(1)
	sll3.addNode(2)
	sll3.addNode(3)
	// Test 
	sll1.deleteByNextHigher()
	sll2.deleteByNextHigher()
	sll3.deleteByNextHigher()
}

Output

 Given Linked List : 
 1 → 2 → 5 → 4 → 3 → 6 → 7 → 8 → NULL
 After Delete Linked List : 
 5 → 4 → 8 → NULL

 Given Linked List : 
 6 → 3 → 2 → NULL
 After Delete Linked List : 
 6 → 3 → 2 → NULL

 Given Linked List : 
 1 → 2 → 3 → NULL
 After Delete Linked List : 
 3 → NULL




Comment

Please share your knowledge to improve code and content standard. Also submit your doubts, and test case. We improve by your feedback. We will try to resolve your query as soon as possible.

New Comment