解题思路
首先题意没有提最长,也没有提公共
所以可以理解我只要有相同的都可以打印
两个链表进行逐渐对比,指针如何移动呢?
相同则移动两个指针的指针
不同的时候由于链表是升序
值小的指针后移
备注
fmt.Scanf 获取数据,测试用例没有问题,就是提示超时,通过率75%
换成 bufio 获取数据即可
package main import ( "fmt" "bufio" "os" "strconv" ) type linkNode struct{ val int next *linkNode } func main(){ var m,n int preHead1,preHead2,cur := &linkNode{},&linkNode{},&linkNode{} //遗留下来的scanf fmt.Scanf("%d",&m) scanner := bufio.NewScanner(os.Stdin) scanner.Split(bufio.ScanWords) cur = preHead1 for i:=0;i<m;i++{ node := &linkNode{} var v int if scanner.Scan(){ v,_ = strconv.Atoi(scanner.Text()) } node.val = v cur.next = node; cur = cur.next } if scanner.Scan(){ n,_ = strconv.Atoi(scanner.Text()) } cur = preHead2 for j:=0;j<n;j++{ node := &linkNode{} var v int if scanner.Scan(){ v,_ = strconv.Atoi(scanner.Text()) } node.val = v cur.next = node; cur = cur.next } //fmt.Println(m,n) helper(preHead1,preHead2) return } func helper(p1,p2 *linkNode){ //fmt.Println(str1,str2) p1 = p1.next p2 = p2.next for p1!=nil && p2!=nil { if p1.val > p2.val{ p2 = p2.next }else if p1.val < p2.val{ p1 = p1.next }else{ fmt.Printf("%d ",p1.val) p2 = p2.next p1 = p1.next } } }