首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

【】关于非循环单链表的插入有关问题

2013-07-16 
【在线等】关于非循环单链表的插入问题#includestdio.h#includemalloc.htypedef struct LNode{int data

【在线等】关于非循环单链表的插入问题

#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;

}

oid 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;

}这个函数中为什么要用s,而不能直接用(*L)????


[解决办法]
因为里面要修改它的值, 总不能执行这个函数把外面的 list 头都修改了把.
[解决办法]
L是你链表的头节点,你在函数中直接使用L的,可能会改变你头节点的位置

热点排行