https:\/\/golangbyexamples.com\/singly-linked-list-in-golang\/<\/a><\/p>\n\n\n\nBelow is an example of a doubly linked list. Prev pointer of head (start) node points to Null. Similarly, the Next<\/strong> pointer of the last node points to Null.<\/p>\n\n\n\n <\/figure>\n\n\n\n<\/span>Program<\/strong><\/span><\/h2>\n\n\n\nTo implement a doubly linked list in Go language, create a node struct with data<\/strong>, prev<\/strong> pointer, and next<\/strong> pointer, methods to add nodes in the doubly linked list (from the front end from the back end both), and methods to traverse forward and reverse.<\/p>\n\n\n\npackage main\n\nimport \"fmt\"\n\ntype node struct {\n\tdata string\n\tprev *node\n\tnext *node\n}\n\ntype doublyLinkedList struct {\n\tlen int\n\ttail *node\n\thead *node\n}\n\nfunc initDoublyList() *doublyLinkedList {\n\treturn &doublyLinkedList{}\n}\n\nfunc (d *doublyLinkedList) AddFrontNodeDLL(data string) {\n\tnewNode := &node{\n\t\tdata: data,\n\t}\n\tif d.head == nil {\n\t\td.head = newNode\n\t\td.tail = newNode\n\t} else {\n\t\tnewNode.next = d.head\n\t\td.head.prev = newNode\n\t\td.head = newNode\n\t}\n\td.len++\n\treturn\n}\n\nfunc (d *doublyLinkedList) AddEndNodeDLL(data string) {\n\tnewNode := &node{\n\t\tdata: data,\n\t}\n\tif d.head == nil {\n\t\td.head = newNode\n\t\td.tail = newNode\n\t} else {\n\t\tcurrentNode := d.head\n\t\tfor currentNode.next != nil {\n\t\t\tcurrentNode = currentNode.next\n\t\t}\n\t\tnewNode.prev = currentNode\n\t\tcurrentNode.next = newNode\n\t\td.tail = newNode\n\t}\n\td.len++\n\treturn\n}\nfunc (d *doublyLinkedList) TraverseForward() error {\n\tif d.head == nil {\n\t\treturn fmt.Errorf(\"TraverseError: List is empty\")\n\t}\n\ttemp := d.head\n\tfor temp != nil {\n\t\tfmt.Printf(\"value = %v, prev = %v, next = %v\\n\", temp.data, temp.prev, temp.next)\n\t\ttemp = temp.next\n\t}\n\tfmt.Println()\n\treturn nil\n}\n\nfunc (d *doublyLinkedList) TraverseReverse() error {\n\tif d.head == nil {\n\t\treturn fmt.Errorf(\"TraverseError: List is empty\")\n\t}\n\ttemp := d.tail\n\tfor temp != nil {\n\t\tfmt.Printf(\"value = %v, prev = %v, next = %v\\n\", temp.data, temp.prev, temp.next)\n\t\ttemp = temp.prev\n\t}\n\tfmt.Println()\n\treturn nil\n}\n\nfunc (d *doublyLinkedList) Size() int {\n\treturn d.len\n}\nfunc main() {\n\tdoublyList := initDoublyList()\n\tfmt.Printf(\"Add Front Node: C\\n\")\n\tdoublyList.AddFrontNodeDLL(\"C\")\n\tfmt.Printf(\"Add Front Node: B\\n\")\n\tdoublyList.AddFrontNodeDLL(\"B\")\n\tfmt.Printf(\"Add Front Node: A\\n\")\n\tdoublyList.AddFrontNodeDLL(\"A\")\n\tfmt.Printf(\"Add End Node: D\\n\")\n\tdoublyList.AddEndNodeDLL(\"D\")\n\tfmt.Printf(\"Add End Node: E\\n\")\n\tdoublyList.AddEndNodeDLL(\"E\")\n\n\tfmt.Printf(\"Size of doubly linked ist: %d\\n\", doublyList.Size())\n\n\terr := doublyList.TraverseForward()\n\tif err != nil {\n\t\tfmt.Println(err.Error())\n\t}\n\n\terr = doublyList.TraverseReverse()\n\tif err != nil {\n\t\tfmt.Println(err.Error())\n\t}\n}<\/code><\/pre>\n\n\n\nOutput:<\/strong><\/p>\n\n\n\nAdd Front Node: C\nAdd Front Node: B\nAdd Front Node: A\nAdd End Node: D\nAdd End Node: E\nSize of doubly linked ist: 5\nvalue = A, prev = , next = &{B 0xc000070060 0xc000070020}\nvalue = B, prev = &{A 0xc000070040}, next = &{C 0xc000070040 0xc000070080}\nvalue = C, prev = &{B 0xc000070060 0xc000070020}, next = &{D 0xc000070020 0xc0000700a0}\nvalue = D, prev = &{C 0xc000070040 0xc000070080}, next = &{E 0xc000070080 }\nvalue = E, prev = &{D 0xc000070020 0xc0000700a0}, next = \n\nvalue = E, prev = &{D 0xc000070020 0xc0000700a0}, next = \nvalue = D, prev = &{C 0xc000070040 0xc000070080}, next = &{E 0xc000070080 }\nvalue = C, prev = &{B 0xc000070060 0xc000070020}, next = &{D 0xc000070020 0xc0000700a0}\nvalue = B, prev = &{A 0xc000070040}, next = &{C 0xc000070040 0xc000070080}\nvalue = A, prev = , next = &{B 0xc000070060 0xc000070020}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"Table of Contents OverviewProgram Overview A Doubly Linked List contains three fields in its node. Data field One Next pointer points to the next node in the list One Previous pointer which…<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","footnotes":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false},"categories":[1],"tags":[],"class_list":["post-5818","post","type-post","status-publish","format-standard","hentry","category-tech"],"yoast_head":"\n
Doubly Linked List in Go (Golang) - Welcome To Golang By Example<\/title>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\t \n\t \n\t \n