Delete all even parity nodes from circular linked list in golang
Go program for Delete all even parity nodes from circular linked list. Here problem description and explanation.
package main
import "fmt"
// Go program for
// Remove all even parity nodes from a circular single linked list
type LinkNode struct {
data int
next * LinkNode
}
func getLinkNode(data int) * LinkNode {
// return new LinkNode
return &LinkNode {
data,
nil,
}
}
type CircularLinkedList struct {
head * LinkNode
tail * LinkNode
}
func getCircularLinkedList() * CircularLinkedList {
// return new CircularLinkedList
return &CircularLinkedList {
nil,
nil,
}
}
func(this *CircularLinkedList) insert(value int) {
var node * LinkNode = getLinkNode(value)
if this.head == nil {
this.head = node
} else {
this.tail.next = node
}
node.next = this.head
this.tail = node
}
// Display node element of circular linked list
func(this CircularLinkedList) display() {
if this.head == nil {
fmt.Println("\n Empty Linked List")
} else {
fmt.Print("\n Linked List Element \n")
// First node of linked list
fmt.Print(" ", this.head.data)
var temp * LinkNode = this.head.next
// Display linked list node
for (temp != nil && temp != this.head) {
// Display node value
fmt.Print(" ", temp.data)
// Visit to next node
temp = temp.next
}
}
}
// Handles the request to find set bits in given integer
func(this CircularLinkedList) coutSetBit(num int) int {
var result int = num
result = result - ((result >> 1) & 1431655765)
result = (result & 858993459) + ((result >> 2) & 858993459)
result = (result + (result >> 4)) & 252645135
result = result + (result >> 8)
result = result + (result >> 16)
result = result & 63
return result
}
func(this *CircularLinkedList) removeNode() {
if this.head == nil {
return
}
var temp * LinkNode = this.head
var auxiliary * LinkNode = this.head
var point * LinkNode = nil
for (temp != nil) {
if this.coutSetBit(temp.data) % 2 == 0 {
auxiliary = temp
// Visit to next node
temp = temp.next
if auxiliary == this.head {
// Remove head node
if auxiliary == this.tail {
// Removing a single node
this.tail = nil
this.head = nil
temp = nil
} else {
this.head = temp
this.tail.next = temp
}
} else if auxiliary == this.tail {
if point != nil {
// When Remove last node
point.next = this.head
}
this.tail = point
} else {
if point != nil {
// When Remove last node
point.next = temp
}
}
auxiliary = nil
} else {
point = temp
// Visit to next node
temp = temp.next
if temp == this.head {
// Stop the process
temp = nil
}
}
}
}
func main() {
var cll * CircularLinkedList = getCircularLinkedList()
// Insert node
cll.insert(3)
cll.insert(12)
cll.insert(32)
cll.insert(14)
cll.insert(27)
cll.insert(19)
cll.insert(1)
cll.insert(18)
fmt.Print("\n Before Remove ")
cll.display()
/*
Node Binary Even Parity
3 (11) Yes
12 (1100) Yes
32 (100000) No
14 (1110) No
27 (11011) Yes
19 (10011) No
1 (1) No
18 (10010) Yes
*/
cll.removeNode()
fmt.Print("\n\n After Remove")
cll.display()
}
Output
Before Remove
Linked List Element
3 12 32 14 27 19 1 18
After Remove
Linked List Element
32 14 19 1
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