链表的插入操作 有一步没搞懂 求解
为什么在插入函数中总是以r==NULL跳出循环而不是以j<i跳出#include <stdio.h>
#include <stdlib.h>
typedef char ElemType;
typedef struct Node
{
ElemType data;
struct Node* next;
}Node,*LinkList;
LinkList GreateFormHead(LinkList L);
int ListLength(LinkList L);
LinkList InitList(LinkList L);
void InsList(LinkList L,ElemType e,int i);
void print(LinkList L);
int main()
{
int i=3;
char c='y';
LinkList L1;
L1=InitList(L1);//这里得出重要结论:凡是要对链表进行操作时都要返回头指针点
L1=GreateFormHead(L1);
print(L1);
printf("\n");
printf("链表的长度为:%d",ListLength(L1));
printf("\n");
if(L1==NULL)
printf("头指针为空\n");
else
printf("头指针不为空\n");
InsList(L1,c,i);
print(L1);
printf("\n");
return 0;
}
LinkList GreateFormHead(LinkList L)
{
char c;
int flag=1;
while(flag)
{
Node* s;
printf("请输入字符\n");
c=getchar();
getchar();
if(c!='$')
{
s=(Node*)malloc(sizeof(Node));
s->data=c;
s->next=L->next;
L->next=s;
}
else
flag=0;
}
return L;
}
int ListLength(LinkList L)
{
int j=0;
Node *p;
p=L->next;
while(p!=NULL)
{
p=p->next;
j++;
}
return j;
}
void InsList(LinkList L,ElemType e,int i)
{
if(i<0)
printf("插入位置错误\n");
Node *s,*r;
//Node* r;
int j=0;
s=(Node*)malloc(sizeof(Node));
r=L;
while(r!=NULL&&j<i)
r=r->next;
j++;
if(r==NULL)
printf("插入位置不在链表内\n");
s->data=e;
s->next=r->next;
r->next=s;
}
LinkList InitList(LinkList L)
{
L=(LinkList)malloc(sizeof(Node));
L->next=NULL;
}
void print(LinkList L)
{
Node *p;
p=L->next;
while(p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
printf("\n");
}