菜鸟提问 有关链表的问题 泪流满面呀 已经头脑混乱了
- 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);}