每日一道编程题(4):链表交并差
@ 灰灰考研
(2018南开大学初试)两个有序的无头结点的链表La,Lb。编写函数:如何以最优的方式找出二者的交集,并且把结果存在一个新链表中返回。
单链表的类型定义如下:
Typeddf struct LNode{
Element Type data;
Struct LNode *next;
}LNode, *ListNode;
函数原型: ListNode* Inter(ListNode *A, ListNode *B)
//链表交并差
Listcode *Insert(ListNode *plist1 , ListNode *plist2){
//判断两个链表是否为空
if(plist1==NULL||plist2=NULL){
return NULL;
}
//头结点
ListNode *newList = ByNode(0);
ListNode *tail = newList;//定义一个节点指向链表头
while(plist1&&plist2){
if(plist1->data==plist2->data){
tail -> next = plist1;
tail = plist1;
plist1 ->next = plist1;
plist2 ->next = plist2;
}else if(plist1->data>plist2->data){
//让小的走
plist2 = plist2 -> next;
}else {
plist1 = plist1 ->next;
}
}
//下面这一步非常重要
tail ->next = NULL;//说明链表合集结束
return newList->next;
}