Posted on 2006-06-22 22:13
Enjoy Life 阅读(247)
评论(0) 编辑 收藏 引用 所属分类:
DS study
通过一个子函数的内部来对单链表的头指针做修改:
1
、以下代码不能达到预期的效果:
typedef int ElemType;
typedef struct ListNode {
ElemType data;
struct LNode *next;
}LNode;
int BadInsert(LNode *head)
{
LNode *NewL;
NewL = (LNode *)malloc(sizeof(LNode));
if(!NewL){
printf("Malloc ERROR\n");
return ERROR;
}
NewL->next = head;
/*Incorrectly updates local copy of head.
*Calling code retains the old values for the first element
*pointer, so it now points at the second element of the list
*/
/*
下面的代码只是修改了head的一个副本,并没有修改实际传进来的
*
参数head,从而并没有达到预期的效果
*/
head = NewL;
return 1;
}
2.
正确的代码
int Insert(LNode **head)
{
LNode *NewL;
NewL = (LNode *)malloc(sizeof(LNode));
if(!NewL)
return 0;
NewL->next = *head;
/* *head gives the calling function's head pointer, so
*the change is not lost when this function returns
*/
*head = NewL;
return 1;
}