算法思想一:暴力解题,设置两个指针p,q,其中q遍历一次单链表,q向后移动一位,直到两个指针指向同一个结点为止。
void search(LinkList L, LinkList S){
LNode *p=L->next;
LNode *q=S->next;
while(p!=NULL){
while(q!=NULL)
{
if(q=p)//如果指向同一个结点
return q;
else
q=q->next;
}
p=p->next;
q=S->next;
}
}
算法思路二:优化的关键是两个链表指针同时移向指向相同的结点,此时时间复杂度就为两个链表长度之和
void INs(LinkList LA,LinkList LB){
int lenA=length(LA);//返回两个单链表的长度
int lenB=length(LB);
if(lenA>lenB)
k=lenA-lenB;//p指针指向最长的那个链表
LA->next=p;
LB->next=q;
else
k=LenB-LenA;
LB->next=p;
LA->next=q;
if(k>0&&p!=NULL){
p=p->next;//p依次后移k位
k--;
}
while(q!=NULL){
if(p=q)
return q;//如果此时相等则返回
else
p=p->next;
q=q->next;//p,q指针同时后移
}
return 0;//查找失败
}