主题:大家觉不觉得无头结点的链表处理起来比带头结点的要烦?
比如这样一个函数:
(1)先看带头结点:
void XXXXX(LinkList &L){
p=L.head->next;
while(p){
对结点进行操作;
p=p->next;
}
}
(2)再来看无头结点:
void XXXXX(LinkList &L){
p=L.head;
对第一个结点进行操作;
p=p->next;
while(p){
对其余结点进行操作;
p=p->next;
}
}
又或者
void XXXXX(LinkList &L){
p=L.head;
while(p->next){
对p结点进行操作;
p=p->next;
}
对最后一个结点进行操作;
}
总之,有头结点的话,对每个结点进行操作的程序只需写一次就够了,而对无头结点,则必先对头结点或尾结点写一段对结点的进行操作的程序,然后再在WHILE循环体中遍历每个结点,写一段对结点的操作程序。
同样是对结点进行操作的程序,带头结点的写一次,而无头结点的要两次,是不是很烦呢……特别是对结点进行操作的程序很长的时候,无头结点的程序看起来更烦,而用函数来代替对结点进行操作的程序,又要考虑参数的传递问题,的确比带头结点的要烦啊……
(1)先看带头结点:
void XXXXX(LinkList &L){
p=L.head->next;
while(p){
对结点进行操作;
p=p->next;
}
}
(2)再来看无头结点:
void XXXXX(LinkList &L){
p=L.head;
对第一个结点进行操作;
p=p->next;
while(p){
对其余结点进行操作;
p=p->next;
}
}
又或者
void XXXXX(LinkList &L){
p=L.head;
while(p->next){
对p结点进行操作;
p=p->next;
}
对最后一个结点进行操作;
}
总之,有头结点的话,对每个结点进行操作的程序只需写一次就够了,而对无头结点,则必先对头结点或尾结点写一段对结点的进行操作的程序,然后再在WHILE循环体中遍历每个结点,写一段对结点的操作程序。
同样是对结点进行操作的程序,带头结点的写一次,而无头结点的要两次,是不是很烦呢……特别是对结点进行操作的程序很长的时候,无头结点的程序看起来更烦,而用函数来代替对结点进行操作的程序,又要考虑参数的传递问题,的确比带头结点的要烦啊……