解题思路
首先题意没有提最长,也没有提公共
所以可以理解我只要有相同的都可以打印
两个链表进行逐渐对比,指针如何移动呢?
相同则移动两个指针的指针
不同的时候由于链表是升序
值小的指针后移
备注
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
}
}
}


京公网安备 11010502036488号