| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 536 人关注过本帖
标题:C语言链表插入方法
只看楼主 加入收藏
滕方明
Rank: 1
等 级:新手上路
帖 子:17
专家分:4
注 册:2011-11-19
结帖率:100%
收藏
已结贴  问题点数:18 回复次数:12 
C语言链表插入方法
请问大家  C语言简单链表中  各种位置节点的插入方法   
while (lable->next != NULL && j<i-1)
{
 label = label->next;
 j++;
 }
 if (lable->next == NULL && j > i-1) return ERROR;
 //label已到最后一个数据结点,但不存在第i个元素,则ERROR
 new->next = label->next;
 label->next = new; //插入在第i个元素的位置,原结点变为第i+1个
}除了这种方法   还有什么好方法   还有  要可以再任何位置上插入节点的   能在位置0  插入  在尾部  插入   和中间任意位置插入   我说的 不是头插法  和尾插法
搜索更多相关主题的帖子: next return C语言 
2013-01-06 21:49
a4811
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:107
注 册:2012-12-20
收藏
得分:0 
程序代码:
 #include"stdio.h"
#include"stdlib.h"
typedef struct Student
{
    int num;
    struct Student *next;
}Stu;

//插入结点(原链表已排序:由小到大)
/*
<不要考虑插入到链头、链尾,随便插>
前提:前面建立的链表是带头结点的。
*/
Stu *Insert(Stu *head,int num)
{
    Stu *pre,*p,*New_code;                //pre为p的前驱结点,New_code为新插入的结点
    pre=head;
    p=head->next;
    New_code=(Stu *)malloc(sizeof(Stu));  //开辟一个内存存放新结点
    New_code->num=num;
    while(p!=NULL&&p->num<New_code->num)
    {
        pre=p;
        p=pre->next;                      //等价于p=p->next;
    }
    pre->next=New_code;
    New_code->next=p;
    return head;
}
//建立带头结点的链表
Stu *Creat()
{
    Stu *pre,*p,*head;                     //pre为p的前驱结点
    pre=head=(Stu *)malloc(sizeof(Stu));   //建立头结点
    head->next=NULL;                       //不要忘记将头结点指针域置空
    p=(Stu *)malloc(sizeof(Stu));          //建立第一个结点
    scanf("%d",&p->num);
    while(p->num!=0)                       //输入0,链表建立结束
    {
        pre->next=p;
        pre=p;
        p=(Stu *)malloc(sizeof(Stu));
        scanf("%d",&p->num);
    }
    pre->next=NULL;                        //pre已指向链尾
    return head;                         
}
2013-01-06 23:11
滕方明
Rank: 1
等 级:新手上路
帖 子:17
专家分:4
注 册:2011-11-19
收藏
得分:0 
回复 2楼 a4811
你的这个方法和我上面的方法是一个   我要的是别的插入方法  
2013-01-06 23:41
a4811
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:107
注 册:2012-12-20
收藏
得分:10 
回复 3楼 滕方明
兄弟啊,插入无非就是两种:一是需要考虑首尾结点,另一种不需要考虑。
需要考虑首尾结点的就是不带头结点的指针;不需要考虑首尾结点的就是带头结点的指针。
思想都是一样的,只是细节方面略有不同。

2013-01-07 00:07
a4811
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:107
注 册:2012-12-20
收藏
得分:0 
回复 4楼 a4811
打错了,不是指针,是链表。
2013-01-07 00:08
滕方明
Rank: 1
等 级:新手上路
帖 子:17
专家分:4
注 册:2011-11-19
收藏
得分:0 
回复 5楼 a4811
while(p!=NULL&&p->num<New_code->num)
     {
         pre=p;
         p=pre->next;                      //等价于p=p->next;
     我主要是想问这里  这个遍历查询的过程  有没有更好的查找方式   有没有可以替代这个过程更简单的方法呢
2013-01-07 04:51
不玩虚的
Rank: 9Rank: 9Rank: 9
来 自:四川
等 级:贵宾
威 望:10
帖 子:331
专家分:1301
注 册:2012-12-9
收藏
得分:0 
建立链表就2种方法,至于楼主想表达的意思是不是,想在链表的建立好后,在链表的任意位置进行插入,再写个插入节点的函数就可以啦。

同学习......同进步....你帮我......我帮你.....上善若水.....
2013-01-07 10:02
h1023417614
Rank: 4
等 级:禁止访问
帖 子:211
专家分:237
注 册:2012-11-30
收藏
得分:0 
2013-01-07 10:57
ksddah
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:53
专家分:135
注 册:2012-12-11
收藏
得分:0 
程序代码:
//链表结点的插入,插入位置为值为a结点的后面 
typedef struct code{
    char ch;
    struct code *next;
}NODE;
void LListinsert(NODE **p_head,char a)
{
   NODE *P,*q;
   q=(NODE *)malloc(sizeof(NODE));
   scanf("%c",&q->ch);
   q->next=NULL;
   if(*p_head==NULL)       //链表为空 
      *p_head=q;
   else
   {
         p=*p_head;
         
         while(p->ch!=a&&p->next!=NULL)   //p此时指向值为a的结点
         p=p->next;
         
         q->next=p->next;
         p->next=q;
   }
}
             
         
    
2013-01-07 11:57
滕方明
Rank: 1
等 级:新手上路
帖 子:17
专家分:4
注 册:2011-11-19
收藏
得分:0 
回复 7楼 不玩虚的
是想在任意位置都能插入新节点  但是一般的写法我知道  我想找个方法代替我  查找位置那个函数
2013-01-07 18:12
快速回复:C语言链表插入方法
数据加载中...
 
   



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

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