refactor: reconstructure souce file into the corresponding folder

This commit is contained in:
dudaodong committed 2022-02-10 17:57:53 +08:00
1 parent 85e1f711f5
commit f551c56921
14 files changed
+20 -14

No files matched your search

@@ -3,11 +3,13 @@ package datastructure
import ( import (
"errors" "errors"
"fmt" "fmt"
"github.com/duke-git/lancet/datastructure"
) )
// DoublyLink is a linked list. Whose node has a generic Value, Pre pointer points to a previous node of the link, Next pointer points to a next node of the link. // DoublyLink is a linked list. Whose node has a generic Value, Pre pointer points to a previous node of the link, Next pointer points to a next node of the link.
type DoublyLink[T any] struct { type DoublyLink[T any] struct {
Head *LinkNode[T] Head *datastructure.LinkNode[T]
length int length int
} }
@@ -18,7 +20,7 @@ func NewDoublyLink[T any]() *DoublyLink[T] {
// InsertAtHead insert value into doubly linklist at head index // InsertAtHead insert value into doubly linklist at head index
func (link *DoublyLink[T]) InsertAtHead(value T) { func (link *DoublyLink[T]) InsertAtHead(value T) {
newNode := NewLinkNode(value) newNode := datastructure.NewLinkNode(value)
size := link.Size() size := link.Size()
if size == 0 { if size == 0 {
@@ -48,7 +50,7 @@ func (link *DoublyLink[T]) InsertAtTail(value T) {
current = current.Next current = current.Next
} }
newNode := NewLinkNode(value) newNode := datastructure.NewLinkNode(value)
newNode.Next = nil newNode.Next = nil
newNode.Pre = current newNode.Pre = current
current.Next = newNode current.Next = newNode
@@ -78,7 +80,7 @@ func (link *DoublyLink[T]) InsertAt(index int, value T) error {
for current != nil { for current != nil {
if i == index-1 { if i == index-1 {
newNode := NewLinkNode(value) newNode := datastructure.NewLinkNode(value)
newNode.Next = current.Next newNode.Next = current.Next
newNode.Pre = current newNode.Pre = current
@@ -161,7 +163,7 @@ func (link *DoublyLink[T]) DeleteAt(index int) error {
// Reverse the linked list // Reverse the linked list
func (link *DoublyLink[T]) Reverse() { func (link *DoublyLink[T]) Reverse() {
current := link.Head current := link.Head
var temp *LinkNode[T] var temp *datastructure.LinkNode[T]
for current != nil { for current != nil {
temp = current.Pre temp = current.Pre
@@ -176,7 +178,7 @@ func (link *DoublyLink[T]) Reverse() {
} }
// GetMiddleNode return node at middle index of linked list // GetMiddleNode return node at middle index of linked list
func (link *DoublyLink[T]) GetMiddleNode() *LinkNode[T] { func (link *DoublyLink[T]) GetMiddleNode() *datastructure.LinkNode[T] {
if link.Head == nil { if link.Head == nil {
return nil return nil
} }
File renamed without changes.
@@ -3,11 +3,13 @@ package datastructure
import ( import (
"errors" "errors"
"fmt" "fmt"
"github.com/duke-git/lancet/datastructure"
) )
// SinglyLink is a linked list. Whose node has a Value generics and Next pointer points to a next node of the link. // SinglyLink is a linked list. Whose node has a Value generics and Next pointer points to a next node of the link.
type SinglyLink[T any] struct { type SinglyLink[T any] struct {
Head *LinkNode[T] Head *datastructure.LinkNode[T]
length int length int
} }
@@ -18,7 +20,7 @@ func NewSinglyLink[T any]() *SinglyLink[T] {
// InsertAtHead insert value into singly linklist at head index // InsertAtHead insert value into singly linklist at head index
func (link *SinglyLink[T]) InsertAtHead(value T) { func (link *SinglyLink[T]) InsertAtHead(value T) {
newNode := NewLinkNode(value) newNode := datastructure.NewLinkNode(value)
newNode.Next = link.Head newNode.Next = link.Head
link.Head = newNode link.Head = newNode
link.length++ link.length++
@@ -36,7 +38,7 @@ func (link *SinglyLink[T]) InsertAtTail(value T) {
current = current.Next current = current.Next
} }
newNode := NewLinkNode(value) newNode := datastructure.NewLinkNode(value)
newNode.Next = nil newNode.Next = nil
current.Next = newNode current.Next = newNode
@@ -65,7 +67,7 @@ func (link *SinglyLink[T]) InsertAt(index int, value T) error {
for current != nil { for current != nil {
if i == index-1 { if i == index-1 {
newNode := NewLinkNode(value) newNode := datastructure.NewLinkNode(value)
newNode.Next = current.Next newNode.Next = current.Next
current.Next = newNode current.Next = newNode
link.length++ link.length++
@@ -144,7 +146,7 @@ func (link *SinglyLink[T]) DeleteAt(index int) error {
// Reverse the linked list // Reverse the linked list
func (link *SinglyLink[T]) Reverse() { func (link *SinglyLink[T]) Reverse() {
var pre, next *LinkNode[T] var pre, next *datastructure.LinkNode[T]
current := link.Head current := link.Head
@@ -159,7 +161,7 @@ func (link *SinglyLink[T]) Reverse() {
} }
// GetMiddleNode return node at middle index of linked list // GetMiddleNode return node at middle index of linked list
func (link *SinglyLink[T]) GetMiddleNode() *LinkNode[T] { func (link *SinglyLink[T]) GetMiddleNode() *datastructure.LinkNode[T] {
if link.Head == nil { if link.Head == nil {
return nil return nil
} }
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -3,11 +3,13 @@ package datastructure
import ( import (
"errors" "errors"
"fmt" "fmt"
"github.com/duke-git/lancet/datastructure"
) )
// LinkedStack implements stack with link list // LinkedStack implements stack with link list
type LinkedStack[T any] struct { type LinkedStack[T any] struct {
top *StackNode[T] top *datastructure.StackNode[T]
length int length int
} }
@@ -40,7 +42,7 @@ func (s *LinkedStack[T]) IsEmpty() bool {
// Push element into stack // Push element into stack
func (s *LinkedStack[T]) Push(value T) { func (s *LinkedStack[T]) Push(value T) {
newNode := NewStackNode(value) newNode := datastructure.NewStackNode(value)
top := s.top top := s.top
if top == nil { if top == nil {
s.top = newNode s.top = newNode
File renamed without changes.