| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8014 人关注过本帖
标题:一个链表的值 赋值给 另一个链表,但是失败
只看楼主 加入收藏
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 7楼 yanzy
崩溃了就重写吧,重新整理思路,比找BUG要快的多。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-09-20 17:43
yanzy
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:104
专家分:372
注 册:2017-2-7
收藏
得分:0 
回复 9楼 renkejun1942
我10 楼就是你这个思路
2017-09-20 17:51
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
其实,会出错很简单,因为每次循环你只申请了一个空间,却试图用这一个空间来存储两个链表的值。

更具体的没看,你的那一堆if给我带来如山的压力。

[此贴子已经被作者于2017-9-20 18:33编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-09-20 18:31
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
回复 10楼 yanzy
链接排序分开处理是不是好点。
链接,首尾接就可以。
排序,链表排序方法有不少,选一种适用的就可以。
2017-09-20 20:01
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:30 
用插排的:
#include <stdio.h>
#include <stdlib.h>

typedef int ElementType;
typedef struct Node *PtrToNode;

struct Node
{
    ElementType Data;
    PtrToNode   Next;
};

typedef PtrToNode List;

List Read(); /* 细节在此不表 */
void Print( List L ); /* 细节在此不表;空链表将输出NULL */
List Merge( List L1, List L2 );
List _InsertSort(List h, int x);
void _free(List h);

int main()
{
    List L1, L2, L;
    L1 = Read();
    L2 = Read();
    L = Merge(L1, L2);
    Print(L);
    Print(L1);
    Print(L2);
    _free(L1);
    _free(L2);
    _free(L);
    return 0;
}

/* 你的代码将被嵌在这里 */
List Read()
{
    PtrToNode first = NULL;
    int n;
    printf("Enter a series of integers (0 to terminate): \n");
    while (scanf("%d",&n)==1 && n!=0)
    {
        PtrToNode new_node = (PtrToNode)malloc(sizeof(struct Node));
        if (new_node == NULL)
        {
            printf("Error: malloc failed in add to list\n");
            exit(0);
        }
        new_node->Data = n;
        new_node->Next = first;
        first = new_node;
    }
    return first;
}

void Print(List L)
{
    for (; L!=NULL; L=L->Next)
        printf("%d ", L->Data);
    printf("\n");
}

List Merge(List L1, List L2)
{
    List L=NULL;
    for (; L1!=NULL; L1=L1->Next)
        L = _InsertSort(L, L1->Data);
    for (; L2!=NULL; L2=L2->Next)
        L = _InsertSort(L, L2->Data);
    return L;
}

List _InsertSort(List h, int x)
{
    List p, q, s;
    p = h;
    q = NULL;
    s = (List)malloc(sizeof(struct Node));
    if (s == NULL)
    {
        printf("Error: malloc failed in add to list\n");
        exit(0);
    }
    s->Data = x;
    s->Next = NULL;
    while (p)
    {
        if (x <= p->Data)
        {
            s->Next = p;
            break;
        }
        q = p;
        p = p->Next;
    }
    if (q)
        q->Next = s;
    else
        h = s;
    return h;
}

void _free(List h)
{
    List p;
    while (h)
    {
        p = h->Next;
        free(h);
        h = p;
    }
}
2017-09-20 21:38
yanzy
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:104
专家分:372
注 册:2017-2-7
收藏
得分:0 
10楼这个也有问题,有些情况没有考虑到
2017-09-20 21:50
xzlxzlxzl
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖北
等 级:贵宾
威 望:125
帖 子:1091
专家分:5825
注 册:2014-5-3
收藏
得分:10 
既然打算释放掉,就不应该在释放后显示L1、L2,因为释放后就是野指针,那块内存被系统保护起来,强行显示会提示错误。
2017-09-20 22:23
yanzy
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:104
专家分:372
注 册:2017-2-7
收藏
得分:0 
写了个合并链表并升序排序

程序代码:
List Merge(List L1, List L2)
{
    int n;
    PtrToNode first = L1, t;
    //合并链表
    for (; L1->Next != NULL; L1 = L1->Next)
        ;
    L1->Next = L2;

    //链表排序 升序,只交换 Data
    for(t=first;t->Next!=NULL;)
    {
        if (t->Data > (t->Next)->Data)
        {
            n = t->Data;
            t->Data = (t->Next)->Data;
            (t->Next)->Data = n;
            t = first;
        }
        else
        {
            t = t->Next;
        }
    }
    return first;
}
2017-09-21 10:03
yanzy
Rank: 5Rank: 5
等 级:职业侠客
威 望:2
帖 子:104
专家分:372
注 册:2017-2-7
收藏
得分:0 
回复 15楼 吹水佬
这是一个题目来的,给定了条条框框
比如main函数里面的不能改,然后应该也不能增加新函数,还有输出样例
所以你这个写的很好,就是不能拿来用

题目如下
02-线性结构1 两个有序链表序列的合并(15 分)
本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。

函数接口定义:

List Merge( List L1, List L2 );
其中List结构定义如下:

typedef struct Node *PtrToNode;
struct Node {
    ElementType Data; /* 存储结点数据 */
    PtrToNode   Next; /* 指向下一个结点的指针 */
};
typedef PtrToNode List; /* 定义单链表类型 */
L1和L2是给定的带头结点的单链表,其结点存储的数据是递增有序的;函数Merge要将L1和L2合并为一个非递减的整数序列。应直接使用原序列中的结点,返回归并后的链表头指针。

裁判测试程序样例:

#include <stdio.h>
#include <stdlib.h>

typedef int ElementType;
typedef struct Node *PtrToNode;
struct Node {
    ElementType Data;
    PtrToNode   Next;
};
typedef PtrToNode List;

List Read(); /* 细节在此不表 */
void Print( List L ); /* 细节在此不表;空链表将输出NULL */

List Merge( List L1, List L2 );

int main()
{
    List L1, L2, L;
    L1 = Read();
    L2 = Read();
    L = Merge(L1, L2);
    Print(L);
    Print(L1);
    Print(L2);
    return 0;
}

/* 你的代码将被嵌在这里 */
输入样例:

3
1 3 5
5
2 4 6 8 10
输出样例:

1 2 3 4 5 6 8 10
NULL
NULL
2017-09-21 10:14
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
回复 19楼 yanzy
这类问题,最好给出完整的题目内容和出处,否则多费力也是白答。
2017-09-21 10:49
快速回复:一个链表的值 赋值给 另一个链表,但是失败
数据加载中...
 
   



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

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