首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

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

2012-02-19 
对于一道面试题的疑问近来在看《程序员面试宝典》这本书,里面有这样的一道题目:有一个C语言用来删除单链表的

对于一道面试题的疑问
近来在看《程序员面试宝典》这本书,里面有这样的一道题目:
有一个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表示链表的头,但它并不存储数据
它的后一个结点是存储数据的第一个结点

随便怎么看了。

热点排行