考研面试问: 链表设置头结点的作用是什么?

方便在第1个位置进行插入、删除操作时同其他位置一样。加了头结点之后,插入、删除都是在后继指针next上进行操作,不用动头指针;若不加头指针的话,在第1个位置插入或者删除第1个元素时,需要动的是头指针。例如:在进行删除操作时,L为头指针,p指针指向被删结点,q指针指向被删结点的前驱,对于非空的单链表:

1.带头结点时

删除第1个结点(q指向的是头结点):q->next(变量)=p->next(值是地址); free(p);
//用到了2个指针变量-若删除p指向的后继结点p->next = p->next->next
再free(p->next)::一般q指向删除结点q=p->next;p->next=q->next;free(q)


删除第i个结点(i不等于1):q->next=p->next;free(p);

*********************

2.不带头结点时

删除第1个结点时(q为空):L=p->next; free(p);
删除第i个结点(i不等于1):q->next=p->next;free(p);
结论:带头结点时,不论删除哪个位置上的结点,用到的代码都一样;不带头结点时,删除第1个元素和删除其它位置上的元素用到的代码不同,相对比较麻烦。


原文地址:https://www.cnblogs.com/cs-lcy/p/7045303.html