工作生活

Intersection of Two Linked Lists

2019-07-01  本文已影响0人  carlclone

刷了一道简单的

pesudo code :

get head a len
get head b len

if a>b
    gap=a-b
    while not end 
        a two step ahead start , b start
        if node equal
            return node

if b>a
    gap=b-a
    while not end
        b two step ahead 

solution1 : (最容易想到的解法,但不是最优)

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func getIntersectionNode(headA, headB *ListNode) *ListNode {
    if headA==nil || headB==nil {
        return nil
    }
    
    aLen :=1
    node:=headA
    for node!=nil {
        node=node.Next
        aLen++
    }

    bLen :=1
    node=headB
    for node!=nil {
        node=node.Next
        bLen++
    }

    var node1 *ListNode
    var node2 *ListNode
    var gap int
    
    if aLen>bLen {
        gap=aLen-bLen
        node1=headA
        for i:=1;i<=gap;i++{
            node1=node1.Next
        }
        node2=headB
    } else {
        gap=bLen-aLen
        node1=headB
        for i:=1;i<=gap;i++{
            node1=node1.Next
        }
        node2=headA
    }
    
    for node1!=nil {
        if node1==node2 {
            return node1
        }
        node1=node1.Next
        node2=node2.Next
        
    }
    
    return nil

}

solution2 : (看了Discuss vote 最多的解法后写的)

上一篇下一篇

猜你喜欢

热点阅读