1. 怎么将两个链表用c语言链接起来
额 要思路还代码
直接上代码了
typedef struct List *List;
List l_head1,l_head2;//两个链表 非空
List p;
p=l_head1;
while(p->next!=NULL)
p=p->next;
p->next=l_head2;
return l_head1;
嗯 搞定 如果你想安全点的话 就把l_head2置空就好了如:l_head2=NULL;
2. C语言两个链表连接简单问题
我感觉因为你在输入值一个值后,先把这个值给当前链表的节点,然后再在当前节点的后一个位置添加一个新建的节点(随机值)。比如说你输入-1之后,r1仍然指向一个新建的随机值节点,你只是将这个节点的next设置成了NULL,但是这个节点的值是随机的,所以中间出现了(也就是多了一个)垃圾值。即代码的问题出现在这里:
while(num1!=-1)
{ r1->data=num1;
r1->next=(node *)malloc(sizeof(node));
r1=r1->next;
scanf("%d",&num1);
}
3. c语言 两个单链表的链接
//帮你修改了一下程序,可以运行了,加了一些注释,你自己分析一下。
#include<stdio.h>
structperson
{
charname[10];
structperson*next;
};
voidmain()
{
inti,j;
structperson*p,*list1,*list2;
structpersona[2]={{"li"},{"wang"}};
structpersonb[3]={{"zd"},{"wa"},{"aa"}};
list1=a;list2=b;
for(i=0;i<2;i++)
a[i].next=&a[i+1];
a[i-1].next=&b[0];//考虑一下这里为何要i-1
for(j=0;j<3;j++)
b[j].next=&b[j+1];
b[j-1].next=NULL;//考虑一下这里为何要j-1
p=list1;
while(p!=NULL)//输出链表不能写p+2
{
printf("%s ",p->name);
p=p->next;
}
}
4. 试用C语言编写程序,连接任意两个链表.
//如果是单链表
struct NODE{
int data;
NODE *next;
};
void link_list(NODE *list1, NODE *list2){
NODE *p, *tail;
for(p=list1, tail=NULL; p; tail=p,p=p->next){}
if(tail)
tail->next = list2;
} //如果是双链表
struct NODE{
int data;
NODE *next;
NODE *prev;
}; void link_list(NODE *list1, NODE list2)
{
NODE *p, *tail;
for(p=list1, tail=NULL; p; tail=p,p=p->next){}
if(tail && list2){
tail->next = list2;
list2->prev = tail;
}
}
5. C语言有关两个链表排序连接的问题
voidConnectLinkList(LinkList*P,LinkList*Q,LinkList*R)
{
LinkListp,q,r,s;
p=*P,q=*Q,r=*R,s=NULL;
p=p->next;
q=q->next;
while(p!=NULL&&q!=NULL)//
{
if(p->data>q->data)
{
s=(LinkList)malloc(sizeof(node));
s->data=q->data;
r->next=s,r=s;
q=q->next;
}
if(p->data<=q->data)
{
s=(LinkList)malloc(sizeof(node));
s->data=p->data;
r->next=s,r=s;
p=p->next;
}
}
if(p!=NULL)
{
r->next=p;
}
if(q!=NULL)
{
r->next=q;
}
/*
while(p->next==NULL&&q->next!=NULL)
{
s=(LinkList)malloc(sizeof(node));
s->data=q->next->data;
r->next=s,r=s;
q=q->next;
if(q->next==NULL)
{
r->next=NULL;
break;
}
}
while(p->next!=NULL&&q->next==NULL)
{
s=(LinkList)malloc(sizeof(node));
s->data=p->next->data;
r->next=s,r=s;
p=p->next;
if(p->next==NULL)
{
r->next=NULL;
break;
}
}*/
r=*R;
while(r->next!=NULL)
{
printf("%d ",r->next->data);
r=r->next;
}
}
把你的链表连接函数修改了一下,看看可对
6. C语言,有两个都含有三个参数的链表,如何把他们连接在一起 这里有两个链表,第一个链表是
玩家节点里面有个things指针应该是指向该玩家所持有 设备对吧
只要遍历链表把记录设备的链表节点的地址赋值给相应玩家链表节点中的things就可以了(当然前提是两链表节点所对应关系位置是对应的)
7. C语言链表连接的问题!
你free掉了b了啊。。free()施放b所指向的内存空间。你把b指向的空间施放掉了。自然P指针实际也指向一个NULL的地址。自然只输出原来的A了啊。。
不用FREE(b)只需要B=NULL就行。。
以上
8. C语言求双链表操作
如果会单链表的话这个应该很简单的啊!就是在加上一些指针,
创建:void Insertl(Dulinklist P, int x)
{
s=new Dulnode;(c++方法来分配空间,如果是C的话改malloc)
s->data=x;
s->next=p->previous;p->previous->next=s;
s->next=p;p->previous=s;
}
删除:void Dell(Dulinklist p);
{
p->previous->next=p->next;
p->next->previous=p->previous;
free(p);
}
基本的算法就是这样的
剩下的你可以自己想想,
如果有问题的话可以把你写的发上来大家帮你改!
9. 如何使用C语言实现两个链表的连接
以前学数据结构做过一个“非递减的链表合并一一个非递增的链表”
程序如下:
#include <stdio.h>
#include <stdlib.h>
typedef struct node{
int data;
struct node *next;
}LinkList;
/* 建立链表 */
LinkList *create_link(int m)
{
LinkList *head,*s,*p;
int i;
head=(LinkList *)malloc(sizeof(LinkList));
head->next=NULL;
p=head;
for(i=0;i<m;i++){
s=(LinkList *)malloc(sizeof(LinkList));
if(s==NULL){
printf("failed.\n");
exit(0);
}
scanf("%d",&s->data);
s->next=NULL;
p->next=s;
p=s;
}
return head;
}
/* 2个非递减的链表合并一一个非递增的链表 */
LinkList *add_link(LinkList *head1,LinkList *head2,LinkList *head)
{
LinkList *p1,*p2,*q;
p1=head1->next;
p2=head2->next;
head=q=head1;
q->next=NULL;
while(p1&&p2){
if(p1->data<=p2->data){
q=p1;
p1=p1->next;
}
else{
q=p2;
p2=p2->next;
}
q->next=head1->next;
head1->next=q;
}
while(p1)
{q=p1;
p1=p1->next;
q->next=head1->next;
head1->next=q;}
while(p2)
{q=p2;
p2=p2->next;
q->next=head1->next;
head1->next=q;}
return head;
}
/* 打印链表 */
void print_link(LinkList *head)
{
LinkList *p;
p=head->next;
if(!p){
printf("Link is NULL.\n");
exit(0);
}
while(p){
printf("%d ",p->data);
p=p->next;
}
}
int main(void)
{
LinkList *head,*head1,*head2;
int m,n;
printf("input length of Link1:");
scanf("%d",&m);
head=create_link(m);
print_link(head);
printf("\n");
printf("input length of Link2:");
scanf("%d",&n);
head1=create_link(n);
print_link(head1);
printf("\n");
head2=add_link(head,head1,head2);
print_link(head2);
getchar();
getchar();
return 0;
}
10. C语言链表连接简单问题
r1=(node*)malloc(sizeof(node));//还没读到数就申请一个结点,最终读第一行生成了4个节点,r2那里也有同样的问题
逻辑错误,有3处地方要改
你没读到数就申请节点,读到-1时已经是4个节点了,所以最后你输入6个数实际有8个节点,要改r1和r2的过程
最后一个节点之所以没显示,是因为你显示的while循环也有逻辑错误,要改最后while循环