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循環