回 帖 发 新 帖 刷新版面

主题:大家觉不觉得无头结点的链表处理起来比带头结点的要烦?

比如这样一个函数:

(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循环体中遍历每个结点,写一段对结点的操作程序。
    同样是对结点进行操作的程序,带头结点的写一次,而无头结点的要两次,是不是很烦呢……特别是对结点进行操作的程序很长的时候,无头结点的程序看起来更烦,而用函数来代替对结点进行操作的程序,又要考虑参数的传递问题,的确比带头结点的要烦啊……

回复列表 (共5个回复)

沙发

不觉得  做多了  什么都是一样的   哈哈
 You could instead write nc = nc + 1 but ++nc is more concise and often more efficient  come from <<The C programming Language>>

板凳

没有什么感觉,有时候觉得有头节点和哨兵节点处理起来会更方便一些。
比如说在单链表中,查找位置时可以不必查找第0个位置,插入时不用管待插入节点是否为头节点。其实我觉得单链表最好能有尾节点,这样循环处理起来能够更方便一些。当然,如果是循环单链表,这样子就未必简单了。循环单链表中可以不用头节点。
以上均为个人意见,如有不对,请予指正。

3 楼

都差不多的吧

4 楼

[quote]没有什么感觉,有时候觉得有头节点和哨兵节点处理起来会更方便一些。
比如说在单链表中,查找位置时可以不必查找第0个位置,插入时不用管待插入节点是否为头节点。[/quote]

就是这样,所以觉得无头结点比带头结点烦

5 楼

嗯,有头结点的是简单一些。

我来回复

您尚未登录,请登录后再回复。点此登录或注册