数据结构之链表(c语言实现),将两个升序链表合并。
程序员文章站
2024-03-22 16:49:10
...
数据结构之链表(c语言实现)
题目:将两个升序链表合并。
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node* next;
}ElemSN;
ElemSN *PreCreatLink(int a[],int n)
{
ElemSN *head=NULL,*p;
int i;
for(i=n-1;i>-1;i--)
{
p=(ElemSN*)malloc(sizeof(ElemSN));
p->data=a[i];
p->next=head;
head=p;
}
return head;
}
ElemSN* Combine(ElemSN *head1,ElemSN *head2)//重新生成一个新链表,尾插。
{
ElemSN *head,*p,*tail;
head=NULL;
while(head1&&head2)
{
if(head1->data<head2->data)
{
p=head1;
head1=head1->next;
}
else//始终比较两个链表的第一个值即可
{
p=head2;
head2=head2->next;
}
p->next=NULL;
if(!head)
head=tail=p;
else
{
tail=tail->next=p;
}
}
if(head1)
p=head1;
else
p=head2;
tail->next=p;
return head;
}
void PrintLink(ElemSN* head)
{
ElemSN *p=head;
for(;p;p=p->next)
printf("%5d",p->data);
}
int main(void)
{
ElemSN *head1,*head2,*head;
int a[7]={2,3,5,6,7,9,11};
int b[5]={2,4,5,7,9};
head1=PreCreatLink(a,7);
head2=PreCreatLink(b,5);
head=Combine(head1,head2);
PrintLink(head);
}
上一篇: 散列表(Hash table)
下一篇: 使用JDBC连接数据库实际操作