读书人

初学者提问 有关链表的有关问题 泪流满

发布时间: 2012-02-06 15:52:44 作者: rapoo

菜鸟提问 有关链表的问题 泪流满面呀 已经头脑混乱了

C/C++ code
#include  <iostream> 
using namespace std;
#define MAXSIZE 1024
typedef int DataType;
typedef struct node
{
DataType data;
struct node *next;
} LNode,*LinkList;

LinkList Creat_LinkList1()
{LinkList L=NULL;/*空表*/
LNode *s;
int x, flag =-1; /*设数据元素的类型为int*/
L=(LinkList)malloc(sizeof(LNode)); /*建立头结点*/
L->data= flag;
L->next =NULL; /*用-1表示头结点*/
scanf("%d",&x);
while (x!=flag)
{ s=(LinkList)malloc(sizeof(LNode));
s->data=x;
s->next=L->next;
L->next =s;
scanf("%d",&x);
}
return L;
}


LNode *Get_LinkList(LinkList L,int i)
{
LNode *p=L;
int j=0;
while (p->next !=NULL && j <i )
{ p=p->next;
j++;
}
if (j==i) return p;
else return NULL;
}

int Insert_LinkList(LinkList L,int i,DataType x)
{ LNode *p,*s; p=Get_LinkList(L,i-1); /*查找第i-1个结点*/
if (p==NULL)
{ printf("参数i错"); return 0;
} /*第i-1个不存在*/
else
{
s=(LinkList)malloc(sizeof(LNode)); /*申请结点*/
s->data=x;
s->next=p->next; /*新结点插入在第i-1个结点后*/
p->next=s;
return 1;
}
}

int Del_LinkList(LinkList L,int i)
{ LinkList p,s; p=Get_LinkList(L,i-1); /*查找第i-1个结点*/
if (p==NULL)
{ printf("第i-1个结点不存在");return -1; }
else
{ if (p->next==NULL)
{ printf("第i个结点不存在");return 0; }
else
{
s=p->next; /*s指向第i个结点*/
p->next=s->next; /*从链表中删除*/
free(s); /*释放*s */
return 1;
}
}}

void main()
{
int i,y=2048;
LinkList L;
Creat_LinkList1();
printf("请输入要加入的结点i 的值:");
scanf ("%d",&i);
Insert_LinkList(L,i,y);
printf("请输入要删除的结点i 的值:");
scanf ("%d",&i);
Del_LinkList(L,i);
}


[解决办法]
这个可以用了
C/C++ code
#include <iostream>using namespace std;#define MAXSIZE 1024typedef int DataType;typedef struct node {      DataType data;     struct node *next;  } LNode,*LinkList;LinkList  Creat_LinkList1() {    LinkList L=NULL;/*空表*/    LNode *s;    int x, flag =-1;       /*设数据元素的类型为int*/    L=(LinkList)malloc(sizeof(LNode));     /*建立头结点*/     L->data= flag;         L->next =NULL;  /*用-1表示头结点*/    printf("请输入节点的值,以-1结束:");    scanf("%d",&x);    while (x!=flag)    {            s=(LinkList)malloc(sizeof(LNode));        s->data=x;        s->next=L->next;          L->next =s;        scanf("%d",&x);   }   return L;}LinkList Get_LinkList(LinkList L,int i){      LNode  *p=L;      int  j=0;      while (p->next!=NULL&&j<i )       {            p=p->next;            j++;         }      if (j==i)           return p;      else                 return NULL;}int  Insert_LinkList(LinkList L,int i,DataType x){     LNode  *p,*s;      p=Get_LinkList(L,i-1);   /*查找第i-1个结点*/    if (p==NULL)     {         printf("参数i错"); return 0;     } /*第i-1个不存在*/    else     {          s=(LinkList)malloc(sizeof(LNode)); /*申请结点*/        s->data=x;         s->next=p->next; /*新结点插入在第i-1个结点后*/        p->next=s;        printf("插入完毕!\n");        return 1;    }}int  Del_LinkList(LinkList L,int i){      LinkList  p,s;       p=Get_LinkList(L,i-1);   /*查找第i-1个结点*/    if (p==NULL)     {        printf("第i-1个结点不存在");        return -1;     }    else        {          if (p->next==NULL)        {            printf("第i个结点不存在");            return 0;         }        else        {             s=p->next;  /*s指向第i个结点*/            p->next=s->next;       /*从链表中删除*/            free(s);               /*释放*s */            printf("删除完毕!\n");            return 1;        }        }}void main(){    int i,y=2048;    LinkList L;        L=Creat_LinkList1();    printf("请输入要加入的结点i 的值:");    scanf ("%d",&i);    Insert_LinkList(L,i,y);    printf("请输入要删除的结点i 的值:");    scanf ("%d",&i);    Del_LinkList(L,i);} 

读书人网 >C++

热点推荐