数据结构:已知递增有序的单链表A,B
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构:已知递增有序的单链表A,B相关的知识,希望对你有一定的参考价值。
已知递增有序的单链表A,B,(A,B中的元素个数分别为m,n,且A,B中都带有头结点),分别存储了一个集合,请设计算法,以求出两个集合A和B的差集A-B,将差集保存在单链表A中,并保持元素的递增有序性。
以下是正确的代码:
LNode *deleteL(LNode *&A,LNode *B)
LNode *p=A->next,*q=B->next;
LNode *pre=A;
LNode *r;
while(p!=NULL&&q!=NULL)
if(p->data<q->data)
pre=p;
p=p->next;
else if(p->data>q->data)
q=q->next;
else
pre->next=p->next;
r=p;//我的问题是:把上边定义的LNode *r去掉,而拿到这里改为LNode *r=p;两种方法都对,但是请问这两种方法有什么区别哪?谁能详细的说一下?麻烦了!!
p=p->next;
free(r);
return A;
LNode *deleteL(LNode *&A,LNode *B)
LNode *p=A->next,*q=B->next;
LNode *pre=A;
while(p!=NULL&&q!=NULL)
if(p->data<q->data)
pre=p;
p=p->next;
else if(p->data>q->data)
q=q->next;
else
pre->next=p->next;
free(p);
p=pre->next;
q=q->next;
return A;
参考技术B 底层实现一样,全部是在堆栈上分配变量;
但作用域不同,上面的定义,整个函数内有效,下一种方式,仅else里面有效。
一般推荐就近声明的原则,也就是用后一种定义 参考技术C 本质是一样的 就是变量定义的位置不同本回答被提问者采纳
两个递增有序的单链表,设计算法成一个非递减有序的链表
以上是关于数据结构:已知递增有序的单链表A,B的主要内容,如果未能解决你的问题,请参考以下文章
设A和B是两个按元素值递增有序的单链表,写一算法将A和B归并为按按元素值递减有序的单链表C,试分析算法的时间复杂度。(利用上篇带有头结点的线性链表操作)