#define NULL 0#include"stdio.h"#include"malloc.h" typedef struct LNode{ int data; struct LNode *next;}LNode,*LinkList;//////////////////////////////////////////////////////////////*带头结点的尾插法建立单链表,返回表头指针*/LinkList CREATLIST(){ int data; LinkList head,s,r; head=(LinkList)malloc(sizeof(LNode)); /*生成头结点*/ r=head; /*尾指针初值指向头结点*/ scanf("%d",&data); while(data!=0) /*0为输入结束符*/ { s=(LinkList)malloc(sizeof(LNode)); /*生成新结点*/ s->data=data; r->next=s; /*新结点插入表尾*/ r=s; /*尾指针r指向新的表尾*/ scanf("%d",&data); /*读下一结点*/ } r->next=NULL; return (head);}/////////////////////////////////////////////////////////////////////两个有序链表的合并!!注意是升序LinkList CONNECT(LinkList head1,LinkList head2){ LinkList p,p1,p2; p=head1; p1=head1->next; p2=head2->next; while(p1&&p2) { if(p1->data<=p2->data) { p->next=p1;p=p1;p1=p1->next; } else { p->next=p2;p=p2;p2=p2->next; } } p->next=p1?p1:p2;//连接剩下的链表 free(head2); return(head1);}/////////////////////////////////////////////////////////////////*遍历线性表a中的元素*/void output(LinkList head){ LinkList p; p=head; while(p->next!=NULL) { printf("%8d",p->next->data); p=p->next; } printf("\n");}/////////////////////////////////////////////////////////////////*查找合并线性表中被三整除的元素删除*/void sdmodn(LinkList head,int n){ LinkList p,p1; p=head; p1=head; while(p->next!=NULL) { p=p->next; if((p->data)%n==0) { p1->next=p->next; free(p); p=p1;//KEY } else p1=p; }} int main(){ /*定义*/ LinkList head1,head2; /*尾插建表*/ printf("\n\nInput list In increase a:(input integral end by 0)\n"); head1=CREATLIST(); /*线性表b*/ printf("\n\n\nInput list In increase b:(input integral end by 0)\n"); head2=CREATLIST(); /*两个链表的合并*/ printf("\n\n\nlist a:\n"); output(head1); printf("\n\n\nlist b:\n"); output(head2); printf("\n\nLinearlist after connect:\n"); head1=CONNECT(head1,head2); /*遍历线性表的元素*/ output(head1); printf("\n\n\npress any key to exit!\n"); sdmodn(head1,3); printf("\n\n\nnew list without mod 3!\n"); output(head1); return 0;}

评论