读书人

对于一道面试题的疑问解决办法

发布时间: 2012-02-19 19:43:38 作者: rapoo

对于一道面试题的疑问
近来在看《程序员面试宝典》这本书,里面有这样的一道题目:
有一个C语言用来删除单链表的头元素的函数,请找出其中的问题并纠正。
void RemoveHead(node* head)
{
free(head)
head=head->next;
}


当然了,这题错的很明显,先把head给free了就找不到head了。
书中给的答案如下:
void RemoveHead(node *head)
{
node *p;
p=head->next;
head->next=p->next;
free(p);
}
我对此的疑问是,使p指向了head的next;那么free p不是free的是head的next么,头结点并没有删除啊,而是删除了头结点的下一个结点。不知道是不是?

[解决办法]
其实我觉得很多定义就是很有二义性的,有时候我们把一个空结点当作头结点,有时候第一个结点当作头结点,而头结点的说法又可能是说第一种,或二种或第一种的后一个结点。

这个具体看头结点的定义是什么,所以如果是第三种情况,就没问题了。
head表示链表的头,但它并不存储数据
它的后一个结点是存储数据的第一个结点

随便怎么看了。

读书人网 >软件架构设计

热点推荐