package main
import "fmt"
/**
题目:给定两个有序链表的head1和head2,打印两个有序链表的公共部分
*/
func main() {
fmt.Println("start")
// 创建测试数据
head1, head2 := createTestList()
fmt.Printf("head1:%v|head2:%v", head1.next, head2.next)
fmt.Println()
fmt.Println("公共部分为:")
for head1.next != nil && head2.next != nil {
node1 := head1.next
node2 := head2.next
// 相同说明则是公共部分,两条链表一起往后移动,查看下一个值是否相同
if node1.value == node2.value {
fmt.Printf("%v", node1.value)
fmt.Println()
head1 = head1.next
head2 = head2.next
}
// 如果第一条链表的数据更大,则第二条链表王后裔
if node1.value > node2.value {
head2 = head2.next
}
// 如果第二条链表的数据更大,则第一条链表王后裔
if node1.value < node2.value {
head1 = head1.next
}
}
fmt.Println()
fmt.Print("end")
}
type ListNode struct {
value int64
next *ListNode
}
func newListNode(value int64) *ListNode {
return &ListNode{
value: value,
next: nil,
}
}
func createTestList() (head1 *ListNode, head2 *ListNode) {
list1 := []int64{4, 6, 7, 9, 21, 50, 75, 112}
list2 := []int64{3, 6, 7, 9, 19, 50, 60, 112}
head1 = &ListNode{}
nextNode1 := head1
for _, value := range list1 {
node := newListNode(value)
nextNode1.next = node
nextNode1 = nextNode1.next
}
head2 = &ListNode{}
nextNode2 := head2
for _, value := range list2 {
node := newListNode(value)
nextNode2.next = node
nextNode2 = nextNode2.next
}
return
}