Bläddra i källkod

add 'Merge Two Sorted Lists'

tangs 5 år sedan
förälder
incheckning
4f0f04e208
1 ändrade filer med 77 tillägg och 0 borttagningar
  1. 77 0
      tags/linked-list/mergeTwoSortedLists/main.go

+ 77 - 0
tags/linked-list/mergeTwoSortedLists/main.go

@@ -0,0 +1,77 @@
+package main
+
+import "fmt"
+
+func main() {
+	var vals1, vals2 []int
+
+	vals1 = []int{}
+	vals2 = []int{1}
+	printList(mergeTwoLists(createList(vals1), createList(vals2)))
+
+	vals1 = []int{1}
+	vals2 = []int{1}
+	printList(mergeTwoLists(createList(vals1), createList(vals2)))
+
+	vals1 = []int{1, 2, 4}
+	vals2 = []int{1, 3, 4}
+	printList(mergeTwoLists(createList(vals1), createList(vals2)))
+}
+
+func createList(vals []int) *ListNode {
+	var head, list *ListNode
+	for _, v := range vals {
+		if head == nil {
+			list = &ListNode{Val: v, Next: nil}
+			head = list
+			continue
+		}
+		var temp = &ListNode{Val: v, Next: nil}
+		list.Next = temp
+		list = list.Next
+	}
+	return head
+}
+
+func printList(node *ListNode) {
+	var temp = node
+	for temp != nil {
+		fmt.Printf("%d", temp.Val)
+		if temp.Next != nil {
+			fmt.Printf("%s", "->")
+		}
+		temp = temp.Next
+	}
+	fmt.Println()
+}
+
+//Definition for singly-linked list.
+type ListNode struct {
+	Val  int
+	Next *ListNode
+}
+
+func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {
+	var tempL1, tempL2 = l1, l2
+	var ans = &ListNode{}
+	var ansCursor = ans
+	for tempL1 != nil && tempL2 != nil {
+		var temp *ListNode
+		if tempL1.Val < tempL2.Val {
+			temp = &ListNode{Val: tempL1.Val, Next: nil}
+			tempL1 = tempL1.Next
+		} else {
+			temp = &ListNode{Val: tempL2.Val, Next: nil}
+			tempL2 = tempL2.Next
+		}
+		ansCursor.Next = temp
+		ansCursor = ansCursor.Next
+	}
+	if tempL1 != nil {
+		ansCursor.Next = tempL1
+	}
+	if tempL2 != nil {
+		ansCursor.Next = tempL2
+	}
+	return ans.Next
+}