首页 > 代码库 > 数据结构>>线性表【注意】-->链表求A-B(原A与B都递增,求完的A-B不改变A原来的顺序)
数据结构>>线性表【注意】-->链表求A-B(原A与B都递增,求完的A-B不改变A原来的顺序)
/*关于链表的题目 * A、B是两个递增有序的单链表,元素个数分别是m和n,求 * 集合A-B,并将结果保存在A中,且仍然保持递增有序。 * converge_ab */#include <iostream.h>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<num;i++){ p=(lnode *)malloc(sizeof(lnode)); p->data=http://www.mamicode.com/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 =http://www.mamicode.com/= 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)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。