diff --git a/链表/两两交换链表中的节点/main.go b/链表/两两交换链表中的节点/main.go new file mode 100644 index 0000000..e84bc09 --- /dev/null +++ b/链表/两两交换链表中的节点/main.go @@ -0,0 +1,54 @@ +package main + +type ListNode struct { + Val int + Next *ListNode +} + +func main() { + +} + +func swapPairs(head *ListNode) *ListNode { + + firstNode := (*ListNode)(head) + secondNode := (*ListNode)(nil) + num := 0 + for head != nil { + if head.Next != nil { + if head.Next.Next != nil { + if num == 0 { + firstNode = head.Next + secondNode = head + } + if secondNode != nil && num != 0 { + secondNode.Next = head.Next + } + tmpright := head.Next.Next + head.Next.Next = head + head.Next = tmpright + secondNode = head + head = tmpright + + num++ + continue + } else { + if num == 0 { + firstNode = head.Next + secondNode = head + } + if secondNode != nil && num != 0 { + secondNode.Next = head.Next + } + tmpright := head.Next.Next + head.Next.Next = head + secondNode = head + head.Next = tmpright + + } + } + head = head.Next + num++ + } + return firstNode +} diff --git a/链表/两数相加/main.go b/链表/两数相加/main.go index 3a7b382..a202e11 100644 --- a/链表/两数相加/main.go +++ b/链表/两数相加/main.go @@ -1,5 +1,9 @@ package main +import ( + "fmt" +) + type ListNode struct { Val int Next *ListNode @@ -8,6 +12,77 @@ type ListNode struct { func main() { } +func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode { + signal := false + tmpstr := "" + firstNode := (*ListNode)(nil) + result := (*ListNode)(nil) + value1 := 0 + + for l1 != nil || l2 != nil { + // + tmpNode := &ListNode{} + a := 0 + if signal { + a = 1 + } + if l1 == nil { + value := l2.Val + if value+a > 9 { + signal = true + } else { + signal = false + } + tmpNode.Val = (value + a) % 10 + result.Next = tmpNode + result = result.Next + l2 = l2.Next + continue + } + if l2 == nil { + value := l1.Val + if value+a > 9 { + signal = true + } else { + signal = false + } + fmt.Println("l2==nil") + tmpNode.Val = (value + a) % 10 + result.Next = tmpNode + result = result.Next + l1 = l1.Next + continue + } + value := l1.Val + l2.Val + if value+a > 9 { + signal = true + } else { + signal = false + } + tmpNode.Val = (value + a) % 10 + if value1 == 0 { + firstNode = tmpNode + result = tmpNode + value1 = 1 + l1 = l1.Next + l2 = l2.Next + continue + } + result.Next = tmpNode + result = result.Next + l1 = l1.Next + l2 = l2.Next + + } + if signal { + tmpNode := &ListNode{} + tmpNode.Val = 1 + result.Next = tmpNode + result = result.Next + } + fmt.Println(tmpstr) + return firstNode +} //func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode { // var str1 string @@ -62,41 +137,41 @@ func main() { // return num //} -func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode { - firstNode := (*ListNode)(nil) - result := (*ListNode)(nil) - value := 0 - - for l1 != nil || l2 != nil { - tmpNode := &ListNode{} - if l1 == nil { - tmpNode.Val = l2.Val - result.Next = tmpNode - result = result.Next - l2 = l2.Next - continue - } else if l2 == nil { - tmpNode.Val = l1.Val - result.Next = tmpNode - result = result.Next - l1 = l1.Next - continue - } - tmpNode.Val = l1.Val + l2.Val - if value == 0 { - firstNode = tmpNode - result = tmpNode - l1 = l1.Next - l2 = l2.Next - value++ - continue - } - result.Next = tmpNode - result = result.Next - l1 = l1.Next - l2 = l2.Next - - } - - return firstNode -} +//func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode { +// firstNode := (*ListNode)(nil) +// result := (*ListNode)(nil) +// value := 0 +// +// for l1 != nil || l2 != nil { +// tmpNode := &ListNode{} +// if l1 == nil { +// tmpNode.Val = l2.Val +// result.Next = tmpNode +// result = result.Next +// l2 = l2.Next +// continue +// } else if l2 == nil { +// tmpNode.Val = l1.Val +// result.Next = tmpNode +// result = result.Next +// l1 = l1.Next +// continue +// } +// tmpNode.Val = l1.Val + l2.Val +// if value == 0 { +// firstNode = tmpNode +// result = tmpNode +// l1 = l1.Next +// l2 = l2.Next +// value++ +// continue +// } +// result.Next = tmpNode +// result = result.Next +// l1 = l1.Next +// l2 = l2.Next +// +// } +// +// return firstNode +//} diff --git a/链表/删除链表的倒数第N个结点/main.go b/链表/删除链表的倒数第N个结点/main.go new file mode 100644 index 0000000..e19bb42 --- /dev/null +++ b/链表/删除链表的倒数第N个结点/main.go @@ -0,0 +1,65 @@ +package main + +import "fmt" + +type ListNode struct { + Val int + Next *ListNode +} + +func main() { + +} +func removeNthFromEnd(head *ListNode, n int) *ListNode { + if head.Next == nil && n == 1 { + return nil + } + firstNode := (*ListNode)(nil) + result := (*ListNode)(nil) + preNode := (*ListNode)(nil) + for head != nil { + fmt.Printf("1----") + if preNode != nil { + fmt.Printf("preNode:%d|", preNode.Val) + if firstNode == nil { + firstNode = preNode + result = preNode + } else { + result.Next = preNode + result = result.Next + } + } + tmp := head + tmp2 := &ListNode{Val: tmp.Val} + value := 0 + for i := 0; i < n; i++ { + if tmp.Next != nil { + tmp = tmp.Next + value++ + + } else { + break + } + } + fmt.Printf("%d", value) + if value == n-1 { + fmt.Printf("找到,") + preNode = nil + head = head.Next + continue + } + preNode = tmp2 + head = head.Next + } + if preNode != nil { + fmt.Printf("preNode:%d|", preNode.Val) + if firstNode == nil { + firstNode = preNode + result = preNode + } else { + result.Next = preNode + result = result.Next + } + } + return firstNode +} diff --git a/链表/随机链表的复制/main.go b/链表/随机链表的复制/main.go new file mode 100644 index 0000000..2e4c8c3 --- /dev/null +++ b/链表/随机链表的复制/main.go @@ -0,0 +1,14 @@ +package main + +type Node struct { + Val int + Next *Node + Random *Node +} + +func main() { + +} +func copyRandomList(head *Node) *Node { + return nil +}