|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
大家看一下,我的单链表是头插法插的,所以存储顺序和逻辑顺序是反的,现在我想用ListInsert插入一个元素然后用GetElem函数和for()语句输出单链表中的元素,老是插不到位置上,求大神解答。
#include<stdio.h>
#include<stdlib.h>
#define ERROR 0
typedef struct LNode
{
int data;
struct LNode;
LNode *next;
}
node,*LinkList;//线性表单链表的存储结构
void CreateList_L(LinkList &L,int n)
{
int i;
LinkList p;
L=(LinkList)malloc(sizeof(node));//假设p是LinkList型的变量,这行语句的意思是由系统生成一个L弄node型结点,同时将该节点的起始位置赋给指针p
for(i=n;i>0;--i)
{
p=(LinkList)malloc(sizeof(node));//生成新节结点
scanf("%d",&p->data);
p->next=L->next;
L->next=p;
}
}//CreateList_l
int GetElem_L(LinkList L,int i,int e)
{
LinkList p;
p=L->next;
int j=1;
while(p&&j<i)
{
p=p->next;
++j;
}
if(!p||j>i)
{return ERROR;}
e=p->data;
return e;
}//GetElem_L
int ListInsert_L(LinkList L,int i, int e)
{
//在带头结点的单链表L中的第i个位置之前插入元素e
LinkList p;
LinkList s;
int j=0;
p=L;
if(p&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j>i-1)
{return ERROR;}
s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return e;
}
void main()
{
LinkList L;
int n;
int m;
int i;
int e;
printf("请输入结点的个数?");
scanf("%d",&n);
CreateList_L(L,n);
printf("你要读取第几个结点?");
scanf("%d",&m);
e=GetElem_L(L,n-m+1,e);
printf("%d\n",e);
printf("你想在倒数第几个元素之前插入新元素\n");
scanf("%d",&i);
printf("你想插入的元素是");
scanf("%d",&e);
ListInsert_L(L,n-i+1,e);
printf("你确定插入的元素是%d\n",e);
for(i=n+1;i>0;i--)
{
e=GetElem_L(L,i,e);
printf("%d",e);
}
}
参考: #include<stdio.h>
#include<stdlib.h>
#define ERROR 0
typedef struct LNode
{
int data;
struct LNode *next;
}node,*LinkList;//线性表单链表的存储结构
void CreateList_L(LinkList *L,int n)
{
int i;
LinkList p, temp;
for(i=n;i>0;--i)
{
p=(LinkList)malloc(sizeof(node));//生成新节结点
printf("请输入第%d个节点的数据:", i);
scanf("%d",&p->data);
if(*L == NULL)//这里使用的是头插法
{
*L = p;
p->next = NULL;
}
else
{
temp = *L;
*L = p;
p->next = temp;
}
}
}
void printNode(LinkList L)
{
LinkList head;
head = L;
while(head)
{
printf("%d \n", head->data);
head=head->next;
}
}
int GetElem_L(LinkList L,int i)
{
LinkList p;
int j=1;
int result;
p=L;
while(p && j<i)
{
p=p->next;
j++;
}
if(!p || j>i)
{return ERROR;}
result=p->data;
return result;
}//GetElem_L
int ListInsert_L(LinkList L,int i, int e)
{
//在带头结点的单链表L中的第i个位置之前插入元素e
LinkList p;
LinkList s;
int j=0;
p=L;
if(p && j<i-1)
{
p=p->next;
j++;
}
if(!p || j>i-1)
{return ERROR;}
s=(LinkList)malloc(sizeof(node));
s->data=e;
s->next=p->next;
p->next=s;
return e;
}
void main()
{
LinkList L = NULL;
int n;
int m;
int i;
int e;
printf("请输入结点的个数?");
scanf("%d",&n);
CreateList_L(&L,n);
printNode(L);
printf("你要读取第几个结点?");
scanf("%d",&m);
e=GetElem_L(L,n-m+1);
printf("%d\n",e);
printf("你想在倒数第几个元素之前插入新元素\n");
scanf("%d",&i);
printf("你想插入的元素是");
scanf("%d",&e);
ListInsert_L(L,n-i+1,e);
printf("你确定插入的元素是%d\n",e);
for(i=n+1;i>0;i--)
{
e=GetElem_L(L,i);
printf("%d",e);
}
}
|
|