单链表中利用表头节点(header node)

单链表的设计一直被我认为很简单,最近细细看了一本书中对单链表的设计,发现其中有一些有意思的地方。

1. 单链表中插入元素的操作,可以不用定位当前节点的前驱节点:

1)temp_element = curr.element; tem_next = curr.next;//暂存当前节点的元素以及当前节点的后驱节点的指针

2) curr.element = new_element;  //  将新元素赋值给当前节点的元素

3) curr.next = new(temp_element, tem_next);  // 以1)中暂存的数据创建新的节点,并赋值给当前节点的后驱节点

2. 但是单链表删除节点时同样会出现的前驱节点定位问题却不能用以上思路解决。根据《数据结构及算法分析》介绍,可以用引入

表头节点并将curr设定为当前节点的前驱节点的方法来解决这一问题:

删除:

curr.next = curr.next.next;

插入:

curr.next = new node(new_elem, curr.next);

这样就能很好地解决前去节点的定位了,换句话说,这能及一点点的空间代价换取高效的“插入”“删除”操作,很有意义。

原文地址:https://www.cnblogs.com/luweiseu/p/1693390.html