这段时间要好好调整一下自己了,发现基础才是王道,所以打算好好铺一铺我滴c指针这一块了,所以数据结构将会断更一段时间,不过接下来要和大家见面的就是我们上次的循环单链表之合并
题目:将链表a和链表b合并为链表c
算法思想
将a链表的尾指针reara与b链表的第一个节点链接起来,并且修改b链表的尾指针rearb,使得它指向链表a的头结点
代码
#include<stdio.h>
#include<malloc.h>
typedef struct node
{
int data;
struct node*next;
}node,*list;
list L_list()
{
list llist;
int num;
node*p;
llist=(node*)malloc(sizeof(struct node));
llist->data=-1;
llist->next=llist;
puts("input value -1 over");
scanf("%d",&num);
while(num!=-1)
{
p=(node*)malloc(sizeof(struct node));
p->data=num;
p->next=llist->next;
llist->next=p;
scanf("%d",&num);
}
p=llist;
while(p->next!=llist)
{
p=p->next;
}
return p;
}
list merge(list reara,list rearb)
{
node *p;
p=reara->next;
reara->next=rearb->next->next;
free(rearb->next);
rearb->next=p;
return rearb;
}
void print(list cl)
{
node*p;
p=cl->next->next;
while(p!=cl->next)
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
int main()
{
list clista,clistb,clistc;
printf("input clista:\n");
clista=L_list();
puts("the clista:");
print(clista);
printf("input clistb:\n");
clistb=L_list();
puts("the clistb:");
print(clistb);
clistc=merge(clista,clistb);
puts("the merge:\n");
print(clistc);
return 0;
}
总结
这一次的代码主要精髓在于如何处理两个链表合并后的关系,所以这一次的难题就是这里了