问一个关于Local Reference来构建链表的问题
我的问题在最后一行,直接看最后一行也没问题比如我想构建一个链表
1->2->3->4->5(NULL)
首先我有一个Push函数
程序代码:
void Push(struct node ** headRef, int data) { struct node* newNode = malloc(sizeof(struct node)); newNode->data = data; newNode->next = *headRef; *headRef = newNode; }
很明显在for(1到6)循环中用这个Push() 函数很容易构建
6->5->4->3->2->1
这样一个链表
因为这个Push()函数总会把node插入头,而不是尾
所以为了构建
1->2->3->4->5->6
可以使用
Special Case + Tail Pointer
也就是把1单独拿出来,再用一个tail pointer
或者使用一个 Dummy Node (代码我就不写了)
或者使用Local References
程序代码:
struct node *BuildWithLocalRef() { struct node *head = NULL; struct node **lastPtrRef = &head; int i; for(i = 1; i < 6; ++i) { Push( lastPtrRef, i ); lastPtrRef = &( ( *lastPtrRef)->next ); } // head == {1,2,3,4,5} return ( head ); }
我感觉也可以理解上面这段代码,但是我看到解释中有这样一段话
This technique is never required to solve a linked list problem, but it will be one of the alternative solutions presented for some of the
advanced problems.
感觉用dummy node 就可以解决链表问题,不需要用到这种LocalReference的方法
我想知道那么这种方法可以在哪种advanced problems中出现??
或者大家把看到这段代码想到的东西原封不动的写下来也好
给思路,贴代码都欢迎
[ 本帖最后由 madfrogme 于 2012-1-18 20:00 编辑 ]