数据结构:已知递增有序的单链表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;

参考技术A 该程序用不到 r 指针,如下:
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的主要内容,如果未能解决你的问题,请参考以下文章

线性表练习之Example009-求两个有序递增链表的差集

C语言单链表合并

请C语言版数据结构高手帮帮忙!

设A和B是两个按元素值递增有序的单链表,写一算法将A和B归并为按按元素值递减有序的单链表C,试分析算法的时间复杂度。(利用上篇带有头结点的线性链表操作)

俩个递增有序单链表的合并算法(含头结点)

实用数据结构:怎样把两个单链表A B(本身都是有序表)合并为C并且C为有序表