| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3015 人关注过本帖
标题:链表的插入
只看楼主 加入收藏
ldsh304
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:242
专家分:755
注 册:2016-1-18
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:4 
链表的插入
程序代码:
# include <stdio.h>
# include <stdlib.h>

typedef struct node
{
    int date;
    struct node *pNext;
}NODE, *PNODE;

PNODE init_list(int *len)//初始化链表
{
    PNODE pHead, pRecord, pTemp;
    int i; 
    
    pHead = NULL;
    printf("请输入链表的长度: ");
    scanf("%d", len);
    for (i=0; i<*len; i++)
    {
        pTemp = (PNODE) malloc(sizeof(NODE));
        if (NULL == pTemp)
        {
            printf("分配失败,程序终止!\n");
            exit(-1);
        }
        pTemp->pNext = NULL;
        printf("节点的值 : ");
        scanf("%d", &pTemp->date);
        if (NULL == pHead)
        {
            pHead = pTemp;
            pRecord = pHead;
        }
        else
        {
            pRecord->pNext = pTemp;
            pRecord = pTemp;
        }
    }
    
    return pHead;
} 

void  traverse_list(PNODE pHead)//遍历链表
{
    PNODE pTemp = pHead;
    
    while (NULL != pTemp)
    {
        printf("%d ", pTemp->date);
        pTemp = pTemp->pNext;
    }
    printf("\n");
} 

bool insert_list(PNODE pHead, int pos, int len, int e)//插入元素 
{
    if (pos<1 || pos>len+1)
    {
        printf("pos 输入错误!\n");
        return false;
    }
    
    PNODE pTemp;
    PNODE pRecord = pHead;

    pTemp = (PNODE) malloc(sizeof(NODE));
    if (NULL == pTemp)
    {
        printf("分配失败,程序终止!\n");
        exit(-1);
    }
    pTemp->pNext = NULL;
    pTemp->date = e;
    if (1 == pos)
    {
        pHead = pTemp;
        pTemp->pNext = pRecord;
    }
    else
    {
        for (int i=1; i<=pos; i++)
        {
            if (pos-1 == i)
            {
                pTemp->pNext = pRecord->pNext;
                pRecord->pNext = pTemp;
                break; 
            }
            pRecord = pRecord->pNext;
        }
    }
    return true;
    
} 

int main()
{
    PNODE pHead = NULL;
    int length = 0;
    int e, pos;
    
    pHead = init_list(&length);
    printf("未处理的链表 : \n"); 
    traverse_list(pHead);
    
    printf("输入插入的位置及元素 : ");
    scanf("%d %d", &pos, &e);
    insert_list(pHead, pos, length, e); 
    printf("插入后的链表 : \n");
    traverse_list(pHead);
    return 0;

 } 

怎么每次输入pos == 1的时候插入不成功;
输入其它的值都可以,源代码怎么修改呀

[此贴子已经被作者于2016-3-14 22:23编辑过]

搜索更多相关主题的帖子: color 
2016-03-14 22:21
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:5 
你在函数中有改变指针的操作

需要传指针的地址进去

bool insert_list(PNODE *pHead, int pos, int len, int e);



[fly]存在即是合理[/fly]
2016-03-15 09:05
ldsh304
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:242
专家分:755
注 册:2016-1-18
收藏
得分:0 
回复 2楼 azzbcc
在 insert_list(); 中已经分配了一个节点(里面有地址和传递的元素),并且让指针指向它了
2016-03-15 12:28
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
程序代码:
if (1 == pos)
{
    pHead = pTemp;  // 你的代码中 pHead是形参,这一行代码不会改变原来的值
    pTemp->pNext = pRecord;
}


[fly]存在即是合理[/fly]
2016-03-15 16:58
ldsh304
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:7
帖 子:242
专家分:755
注 册:2016-1-18
收藏
得分:0 
哦哦, 谢谢了
2016-03-16 13:09
快速回复:链表的插入
数据加载中...
 
   



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

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