| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2026 人关注过本帖
标题:两个链表连接的问题
只看楼主 加入收藏
love_ken
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2006-6-16
收藏
 问题点数:0 回复次数:6 
两个链表连接的问题

请教一道题。这题是建立两个链表,再把它们连接起来,就是在第一条链表的结尾连接上第二条链表,下面是我写的程序,为什么打印出的数据少了两条链表的最后一个数据?
----------------------------------------------------
#include<stdio.h>
#include<stdlib.h>

#define M 4
#define N 3
#define LEN sizeof(struct ListData)

struct ListData
{
int num;
struct ListData *next;
};

typedef struct ListData LIST;

int n;

struct ListData * __CreatList(int count)
{
n = 0;

struct ListData *head;
struct ListData *p1, *p2;

p1 = p2 = (struct ListData *)malloc(LEN);
if (p1 == NULL)
{
printf("Can't get values.\n");
exit (1);
}

head = NULL;

printf("Input the data:\n");
scanf("%d", &p1->num);

while (count)
{
n++;

if (n == 1)
head = p1;
else
p2->next = p1;

p2 = p1;

p1 = (struct ListData *)malloc(LEN);
if (NULL == p1)
{
exit (1);
}

printf("Input the data:\n");
scanf("%d", &p1->num);

count--;
}

p2->next = NULL;

return (head);
}


struct ListData *__LinkList(LIST *L1, LIST *L2)
{
struct ListData *P0, *head;

head = L1->next;

while (L1)
{
P0 = L1;
L1 = L1->next;
}

P0->next = L2->next;

free(L2);

return (head);
}


void __PrintList(struct ListData *P)
{
struct ListData *L;

L = P;

printf("Now the list_data is:\n");
if (P != NULL)
{
while (L != NULL)
{
printf("%d ", L->num);
L = L->next;
}
}
}


int main(void)
{
struct ListData *L1, *L2, *head;

L1 = __CreatList(M);
L2 = __CreatList(N);

head = __LinkList(L1, L2);

__PrintList(head);

system("Pause");
return 0;
}

搜索更多相关主题的帖子: 链表 ListData struct define int 
2006-06-17 09:49
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 
以下是引用love_ken在2006-6-17 9:49:06的发言:

请教一道题。这题是建立两个链表,再把它们连接起来,就是在第一条链表的结尾连接上第二条链表,下面是我写的程序,为什么打印出的数据少了两条链表的最后一个数据?
----------------------------------------------------
#include<stdio.h>
#include<stdlib.h>

#define M 4
#define N 3
#define LEN sizeof(struct ListData)

struct ListData
{
int num;
struct ListData *next;
};

typedef struct ListData LIST;

int n;

struct ListData * __CreatList(int count)
{
n = 0;

struct ListData *head;
struct ListData *p1, *p2;

p1 = p2 = (struct ListData *)malloc(LEN);
if (p1 == NULL)
{
printf("Can't get values.\n");
exit (1);
}

head = NULL;

printf("Input the data:\n");
scanf("%d", &p1->num);

while (count)
{
n++;

if (n == 1)
head = p1;
else
p2->next = p1;

p2 = p1;

p1 = (struct ListData *)malloc(LEN);
if (NULL == p1)
{
exit (1);
}

printf("Input the data:\n");
scanf("%d", &p1->num); /*这里.你想想能接受到最后一个数字吗 */

count--;
}

p2->next = NULL;

return (head);
}


struct ListData *__LinkList(LIST *L1, LIST *L2)
{
struct ListData *P0, *head;

head = L1->next; /* head指向哪..你第一个结点不要了? */

while (L1)
{
P0 = L1;
L1 = L1->next;
}

P0->next = L2->next; /* 你把L2的第一个结点也给扔了 */

free(L2); /* 你这释放的是什么..再说.释放应该在打印里释放. */

return (head);
}


void __PrintList(struct ListData *P)
{
struct ListData *L;

L = P;

printf("Now the list_data is:\n");
if (P != NULL)
{
while (L != NULL)
{
printf("%d ", L->num);
L = L->next;
}
}
}


int main(void)
{
struct ListData *L1, *L2, *head;

L1 = __CreatList(M);
L2 = __CreatList(N);

head = __LinkList(L1, L2);

__PrintList(head);

system("Pause");
return 0;
}


[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-06-17 10:48
love_ken
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2006-6-16
收藏
得分:0 

这里我改成这样了,但是不知道为什么,在__CreatList这个函数中,传递的参数是链表的长度,但在输入数的时候却需要多输入一个数,例如这例子两条链表共输入9个数,但我想输入的只是7个数,这是为什么?

struct ListData *__LinkList(LIST *L1, LIST *L2)
{
struct ListData *P0, *head;

head = L1;
while (L1)
{
P0 = L1;
L1 = L1->next;
}

P0->next = L2;
return (head);
}

2006-06-17 12:18
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 
以下是引用love_ken在2006-6-17 9:49:06的发言:

struct ListData * __CreatList(int count)
{
n = 0;

struct ListData *head;
struct ListData *p1, *p2;

p1 = p2 = (struct ListData *)malloc(LEN);
if (p1 == NULL)
{
printf("Can't get values.\n");
exit (1);
}

head = NULL;

printf("Input the data:\n");
scanf("%d", &p1->num);

while (count) /* 你已经输入一次 而count没有减1 当然会多一次 */
{
n++;

if (n == 1)
head = p1;
else
p2->next = p1;

p2 = p1;

p1 = (struct ListData *)malloc(LEN);
if (NULL == p1)
{
exit (1);
}

printf("Input the data:\n");
scanf("%d", &p1->num);

count--;
}

p2->next = NULL;

return (head);
}



[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-06-17 13:39
love_ken
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2006-6-16
收藏
得分:0 
哦,是的,谢谢你。
2006-06-17 14:22
love_ken
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2006-6-16
收藏
得分:0 
现在其他地方没问题,就是打印出来的结果总是少了两条链表最后两个数,是不是连接那个函数有问题?
能帮我看看吗?谢谢。
2006-06-17 14:36
SunShining
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:31
帖 子:2215
专家分:0
注 册:2006-2-17
收藏
得分:0 

[CODE]while (count)
{
n++;

if (n == 1)
head = p1;
else
p2->next = p1;

p2 = p1;

p1 = (struct ListData *)malloc(LEN);
if (NULL == p1)
{
exit (1);
}

printf("Input the data:\n");
scanf("%d", &p1->num); /*这里.你想想能接受到最后一个数字吗 */

count--;
}[/CODE]

这的问题.我不写出来了吗..你自己想想!


[glow=255,violet,2]闭关修炼ing...[/glow] [FLASH=360,180]http://www./chinaren.swf[/FLASH]
2006-06-17 18:53
快速回复:两个链表连接的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020230 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved