《数据结构》带头结点单链表的合并
发布时间:2020-12-15 05:59:19 所属栏目:安全 来源:网络整理
导读:单链表的合并 一般单链表的合并和前一篇博客写的但循环链表的合并思路基本一致,区别在于合并后不用将最后一个结点的指针域指向头结点。 //合并void Combine(LinkList L1,LinkList L2){struct LNode *p1;struct LNode *p2;p1=L1-next;p2=L2-next;struct LNod
单链表的合并 一般单链表的合并和前一篇博客写的但循环链表的合并思路基本一致,区别在于合并后不用将最后一个结点的指针域指向头结点。 //合并 void Combine(LinkList L1,LinkList L2){ struct LNode *p1; struct LNode *p2; p1=L1->next; p2=L2->next; struct LNode *s1,*s2; while(p1){ if(p1->next==NULL){ s1=p1; break; } p1=p1->next; } while(p2){ if(p2->next==NULL){ s2=p2; break; } p2=p2->next; } s1->next=L2->next; } 具体实现: #include<stdio.h> #include<iostream> using namespace std; #define MAX 100 typedef struct LNode{ int data; struct LNode *next; }LNode,*LinkList; int InitList(LinkList &L){ L=new LNode; L->next=NULL; return 1; } int ListLength(LinkList L){ int length=0; struct LNode *p; p=L->next; while(p){ p=p->next; ++length; } return length; } void TraveList(LinkList L){ struct LNode *p; p=L->next; while(p){ printf("%d ",p->data); p=p->next; } printf("n"); } //使用后插法创建单链表 void CreateList(LinkList &L,int n){ L=new LNode; L->next=NULL; struct LNode *r; r=L; for(int i=0;i<n;i++){ printf("请输入第%d个元素值:",i+1); struct LNode *p; p=new LNode; scanf("%d",&p->data); p->next=NULL; r->next=p; r=p; } } //合并 void Combine(LinkList L1,*s2; while(p1){ if(p1->next==NULL){ s1=p1; break; } p1=p1->next; } while(p2){ if(p2->next==NULL){ s2=p2; break; } p2=p2->next; } s1->next=L2->next; } int main(){ LinkList A; LinkList B; if(InitList(A)){ printf("链表A初始化成功!n"); }else{ printf("链表初始化失败!n"); } if(InitList(B)){ printf("链表B初始化成功!n"); }else{ printf("链表B初始化失败!n"); } printf("请输入链表A的长度:"); int n1; scanf("%d",&n1); CreateList(A,n1); printf("遍历链表A:n"); TraveList(A); printf("链表A的长度:%dn",ListLength(A)); printf("请输入链表B的长度:"); int n2; scanf("%d",&n2); CreateList(B,n2); printf("遍历链表B:n"); TraveList(B); printf("合并后的链表:n"); Combine(A,B); TraveList(A); printf("合并后的链表长度是:%dn",ListLength(A)); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |