博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构>>线性表【注意】-->链表求A-B(原A与B都递增,求完的A-B不改变A原来的顺序)...
阅读量:6163 次
发布时间:2019-06-21

本文共 1753 字,大约阅读时间需要 5 分钟。

/*关于链表的题目 * A、B是两个递增有序的单链表,元素个数分别是m和n,求 * 集合A-B,并将结果保存在A中,且仍然保持递增有序。 * converge_ab */#include 
using namespace std;typedef struct lnode{ int data; struct lnode * next;}lnode;int main(){ lnode * create_chain(int num,int interval,int start); void converge_ab(lnode *A,lnode *B); lnode * A,*B,*q,*p; int m=4,n=7; A=create_chain(4,3,2); //2 5 8 11 B=create_chain(7,4,1); //1 5 9 13 17 21 25 p=A;/* while(p->next != NULL){ cout << p->next->data <<" "; p=p->next; } cout << endl; q=B; while(q->next != NULL){ cout << q->next->data <<" "; q=q->next; } cout << endl; converge_ab(A,B,m,n); p=A;*/ converge_ab(A,B); p=A; while(p->next != NULL){ cout << p->next->data <<" "; p=p->next; }}lnode * create_chain(int num,int interval,int start){ lnode * head=(lnode *)malloc(sizeof(lnode)),*p,*q=head; int i; for(i=0;i
data=start+(i*interval); p->next=NULL; q->next=p; q=q->next; } return head;}void converge_ab(lnode *A,lnode *B){ lnode * q=B->next,* r=A,* temp; while(r->next!=NULL && q!=NULL){ if(r->next->data < q->data){ r=r->next; }else if(r->next->data == q->data){ temp=r->next; r->next=temp->next; free(temp); }else{ q=q->next; } }}
这里之前犯的错误是将后面的写成三个if,而不是else if。它们的区别在于:
 
如果是三个if, 这三个if在条件成立的情况下都会执行,假设第一个if已经执行了,这时r是改变了的,这样一旦改变了的r也符合后面的标准,就会继续执行下面的if
 
如果是if else的话,会选if...else if....else...里面三种情况之一来执行,执行完之后就会退出来,进行下一轮的循环。
 
(使两者等价的做法是将3个if的那种情况中,里面每一个if里面的最后加上continue)

转载于:https://www.cnblogs.com/kateblog/p/3913413.html

你可能感兴趣的文章
c++面向对象的一些问题1 0
查看>>
售前工程师的成长---一个老员工的经验之谈
查看>>
Get到的优秀博客网址
查看>>
老男孩教育每日一题-第107天-简述你对***的理解,常见的有哪几种?
查看>>
Python学习--time
查看>>
在OSCHINA上的第一篇博文,以后好好学习吧
查看>>
Spring常用注解
查看>>
linux:yum和apt-get的区别
查看>>
Sentinel 1.5.0 正式发布,引入 Reactive 支持
查看>>
数据库之MySQL
查看>>
2019/1/15 批量删除数据库相关数据
查看>>
数据类型的一些方法
查看>>
Webpack 2 中一些常见的优化措施
查看>>
移动端响应式
查看>>
js中var、let、const的区别
查看>>
简洁优雅地实现夜间模式
查看>>
react学习总结
查看>>
在soapui上踩过的坑
查看>>
MySQL的字符集和字符编码笔记
查看>>
ntpd同步时间
查看>>