【在线等】关于非循环单链表的插入问题
#include<stdio.h>
#include<malloc.h>
typedef struct LNode{
int data;
struct LNode *pNext;
}LNODE ,* pLNODE;
pLNODE Create_List(pLNODE *L);
void insert_first_List(pLNODE * L,int i);//只能添加首节点,给首节点赋值
void List_Insert(pLNODE *L, int j, int i);//在链表的第j个位置之前插入一个结点,结点的值是i;
int main(void)
{
pLNODE pHead = NULL;
int i = 0;
pHead = Create_List(&pHead);
insert_first_List(&pHead,7);
printf("%d\n",pHead->pNext->data);
for(i= 1;i<5;i++)
{
List_Insert(&pHead, i, 2*i);
}
printf("%d",pHead->pNext->data);
return 0;
}
pLNODE Create_List(pLNODE *L)
{
*L = (pLNODE)malloc(sizeof(struct LNode));
if(!(*L))
return NULL;
(*L)->pNext = NULL;
return *L;
}
void insert_first_List(pLNODE * L, int i)
{
pLNODE p;
p = (pLNODE)malloc(sizeof(struct LNode));
p->data = i;
p->pNext = (*L)->pNext;
(*L)->pNext = p;
}
void List_Insert(pLNODE *L, int j, int i)
{
int k = 0;
pLNODE p,s = (*L);//为什么直接用(*L)就不行
//p = (pLNODE)malloc(sizeof(struct LNode));
while((s) && k<j-1)
{
(s) = (s)->pNext;
k++;
}
if(!(s) || k>j-1)
exit(-1);
p = (pLNODE)malloc(sizeof(struct LNode));
p->data = i;
p->pNext = (s)->pNext;
(s)->pNext = p;
}
[解决办法]
因为里面要修改它的值, 总不能执行这个函数把外面的 list 头都修改了把.
[解决办法]
L是你链表的头节点,你在函数中直接使用L的,可能会改变你头节点的位置