CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

菜鸟问题:写出在链表某个结点前面插入一个结点的程序。

楼主fashionzhou(自由港)2005-12-20 21:03:03 在 C/C++ / C语言 提问

大家给看看 问题点数:15、回复次数:7Top

1 楼zhousqy(标准C匪徒)(甩拉,甩拉)回复于 2005-12-20 21:31:17 得分 0

p->next   =   pre->next;  
  pre->next   =   p;Top

2 楼yclr(雪阳)回复于 2005-12-20 21:50:35 得分 0

根据某一个插入的数据确定插入在什么地方,例如学生基本信息,则插入某一个结点pr之前为:  
  while(p->next!=null)  
  {  
  if(p->next->stu_id==n)  
          {  
              q=p+1;p->next=pr;pr->next=q;  
          }  
  }  
  核心内容是用几个指针记住插入位置和它后面的结点,然后把过程搞清楚就好了Top

3 楼sankt(宠辱不惊,看庭前花开花落;去留无意,望天空云卷云舒.)回复于 2005-12-20 21:55:08 得分 0

需要注意特别的位置,比如说首节点   和尾节点.  
  中间插入是很一般的情况.  
  Top

4 楼f_acme(沧海一声笑)回复于 2005-12-20 22:46:57 得分 0

应该是前一个吧.  
  在p的前面插入一个值为data的节点:  
   
  new(s);  
  s->data=p->data;  
  s->next=p->next;  
   
  p->data=data;  
  p->next=s;  
   
  把当前节点后移一个.  
   
   
   
  -----------------  
  http://blog.csdn.net/f_acmeTop

5 楼fashionzhou(自由港)回复于 2005-12-23 09:04:33 得分 0

这是我写的,大家给看看错在哪里?  
  #include   <stdio.h>  
  #include   <stdlib.h>  
   
  #define   MAX   10  
   
  typedef   struct   node  
  {  
  int   number;  
   
  struct   node   *next;  
  }slnodetype;  
   
  int   Data[Max]={1,3,5,7,2,4,6,8,9,0};  
   
  slnodetype   *CreateList(slnodetype   *Head)  
  {  
  slnodetype   *Pointer,*New;  
  int   i;  
  Head=(slnodetype*)malloc(sizeof(slnodetype));  
   
  if(Head==NULL)  
  printf("内存分配失败!");  
          else  
  {  
  Head->number=Data[0];  
   
  Head->next=NULL;  
  Pointer=Head;  
  for(i=1;i<MAX;i++)  
  {  
  New=(slnodetype*)malloc(sizeof(slnodetype));  
  New->number=Data[i];  
   
  New->next=NULL;  
  Pointer->next=New;  
  Pointer=New;  
   
   
  }  
   
  }  
  return   Head;  
   
  }  
   
  void   print(slnodetype   *Head)  
  {  
  slnodetype   *Pointer;  
  Pointer=Head;  
   
  while(Pointer!=NULL)  
  {  
  printf("%d",Pointer->number);  
  Pointer=Pointer->next;  
  }  
  printf("\n");  
  }  
   
  slnodetype*   insertlist(slnodetype   *Head,slnodetype   *New,int   key)  
  {  
  slnodetype*   Pointer,*prevPointer;  
  Pointer=Head;  
  int   j=0;  
  while(1)  
  {  
  if(Pointer==NULL)  
  {  
  New->next=Head;  
  Head=New;  
  break;  
  }  
  while(Pointer!=NULL   &&j<key-1)  
  {  
  Pointer=prevPointer->next;  
  j++;  
  }  
  if(j!=key-1)  
  {  
  printf("Error!");  
   
  }  
  New->number=key;  
  New->next=Pointer->next;  
  prevPointer->next=New;  
  break;  
  Pointer=Pointer->next;  
  }  
   
  return   Head;  
  }  
   
  void   main()  
  {  
  slnodetype*   Head,*New;  
  int   key;  
  Head=CreateList(Head);  
  if(Head!=NULL)  
  {  
  print(Head);  
  while(1)  
  {  
  printf("当输入'0'是循环中止\n");  
  New=(slnodetype*)malloc(sizeof(slnodetype));  
  if(New==NULL)  
  printf("内存分配失败!");  
  printf("请输入要插入的数据:");  
  scanf("%d",&New->number);  
  if(New->number==0)  
  break;  
  printf("请输入数据:");  
  scanf("%d",&key);  
  Head=insertlist(Head,New,key);  
  print(Head);  
  }  
  free(Head);  
  }  
  }  
   
  void   free(slnodetype*   Head)  
  {  
  slnodetype   *Pointer;  
  if(Head!=NULL)  
  {  
                Pointer=Head;  
        Head=Head->next;  
        free(Pointer);  
  }  
  }  
  Top

6 楼xiaolingtongsw()回复于 2006-01-03 22:06:01 得分 0

nodetype   *ins(nodetype   *h,int   i,int   data)  
  {nodetype   *p,*s;  
  s=(nodetype   *)malloc(sizeof(nodetype));  
  s->data=data;  
  s->next=NULL;  
  p=find(h,i);  
  if(p!=NULL)  
  {   s->next=p->next;  
  p->next=s;  
  }  
   
  else  
  cout<<"输入的值不正确"<<endl;  
  return   h;  
  }Top

7 楼Kid4you(Kid4you)回复于 2006-01-13 20:01:01 得分 15

#include<iostream>  
  using   namespace   std;  
   
  struct   Node  
  {  
          Node   *next;  
          int     data;  
  };  
   
  bool   InsertNode(Node   *pHead,   int   pos,   int   data)  
  {  
          //   find   the   position  
          Node   *p   =   pHead;    
   
          while   (pos   >   1   &&   p)  
          {  
                  p   =   p->next;  
                  --pos;  
          }  
          //   can't   fint   the   position  
          if   (pos   >   1)   return   0;  
   
          Node   *pTmp   =   new   Node;  
          pTmp->data   =   data;  
   
          //   if   the   node   is   the   head  
          if   (pos   ==   0)  
          {  
                  pTmp->next   =   pHead;  
                  pHead->next   =   pTmp;  
          }  
          else  
          {  
                  pTmp->next   =   p->next;  
                  p->next   =   pTmp;  
          }  
          return   1;  
  }  
   
   
  void   YourInsert(Node   *&pHead,   int   datainsert,   int   data)  
  {  
          Node   *p   =   pHead;    
          Node   *pTmp   =   new   Node;  
          pTmp->data   =   data;  
          pTmp->next   =   0;  
           
          if   (!p)  
          {  
                  pHead   =   pTmp;  
          }  
          else   if   (!p->next   &&   p->data   !=   datainsert)     //   only   head   node   &&   doesn't   match  
          {  
                  pHead->next   =   pTmp;  
          }  
          else   if   (p->data   ==   datainsert)   //   head   matches  
          {  
                  pTmp->next   =   pHead;  
                  pHead   =   pTmp;  
          }  
          else         //   Nodes   >=   2  
          {  
                  while   (p->next   &&   p->next->data   !=   datainsert)  
                  {  
                          p   =   p->next;  
                  }  
                  pTmp->next   =   p->next;  
                  p->next   =   pTmp;  
          }          
  }  
   
   
   
  void   Print(Node   *pHead)  
  {  
          cout   <<   "List:   "   ;  
          while   (pHead)  
          {  
                  cout   <<   pHead->data   <<   "   ";  
                  pHead   =   pHead->next;  
          }  
          cout   <<   endl;  
  }  
   
   
  void   Destory(Node   *pHead)  
  {  
          Node   *p   =   pHead;  
          while   (p)  
          {  
                  p   =   p->next;  
                  delete(pHead);  
                  pHead   =   p;  
          }  
  }  
   
   
  void   insert(int   datainsert,   int   data,   Node   *List   )  
  {  
          Node   *p,   *q,*s;  
           
          p   =   List;  
          q->next   =   p;  
           
          while(p!=NULL   &&   p->data!=data)  
          {  
                  p   =   p->next;    
          }  
          s   =   (Node   *)malloc(sizeof(Node));  
           
          s->data   =   datainsert;  
           
          s->next   =   q->next;  
           
          q->next   =   s;  
  }    
   
   
  int   main()  
  {  
           
          Node   *pHead   =   0;  
          int   i,   j;  
          while   (cin   >>   i   >>   j)  
          {  
                  if   (i   <   0   ||   j   <   0)  
                          break;  
                  YourInsert(pHead,   i,   j);  
                  Print(pHead);  
          }  
          Destory(pHead);  
           
          return   0;  
  }  
   
  Top

相关问题

  • 求救有关链表的创建和按照小到大的排序,插入结点保序的程序有问题,高手帮忙解决一下哈
  • 求AVL-trees插入、删除结点的C++代码!
  • 关于插入链表结点的问题
  • 请教如何在若干相同结点中添加新结点,比如在所有<author>中插入<name>
  • TreeView如何在程序中选中一个结点呢?
  • 带头结点的单链表逆置程序
  • 怎样用程序实现在TreeView控件中添加根结点和子结点?
  • 如何用程序往另外一个程序的文本框插入文字?
  • 如何在程序中插入大于256色的位图
  • 怎么样在程序中插入FLASH动画?

关键词

  • 结点
  • 节点
  • 数据
  • null
  • slnodetype
  • ptmp
  • phead
  • datainsert
  • next
  • 插入

得分解答快速导航

  • 帖主:fashionzhou
  • Kid4you

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo