剑指 Offer 25. 合并两个排序的链表
func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {
dummy := &ListNode{}
cur := dummy
for l1 != nil && l2 != nil {
if l1.Val <= l2.Val {
cur.Next = l1
l1 = l1.Next
cur = cur.Next
continue
} else {
cur.Next = l2
l2 = l2.Next
cur = cur.Next
continue
}
}
// 当遍历完l1或l2之后。最多剩下其中一个
// 这个时候只要把cur.Next接上它就行了
if l1 != nil {
cur.Next = l1
} else {
cur.Next = l2
}
return dummy.Next
}
剑指 Offer 52. 两个链表的第一个公共节点
func getIntersectionNode(headA, headB *ListNode) *ListNode {
countA := 0
countB := 0
tempA, tempB := headA,headB
for tempA != nil {
tempA = tempA.Next
countA++
}
for tempB != nil {
tempB = tempB.Next
countB++
}
var fast,slow *ListNode
var step int
if countA > countB {
step = countA-countB
fast,slow = headA, headB
} else {
step = countB - countA
fast,slow = headB, headA
}
for i:=0;i<step;i++{
fast = fast.Next
}
for fast != slow {
fast = fast.Next
slow = slow.Next
}
if fast == slow {
return fast
}
return nil
}