| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 455 人关注过本帖, 1 人收藏
标题:问一个关于Local Reference来构建链表的问题
只看楼主 加入收藏
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
结帖率:98.63%
收藏(1)
已结贴  问题点数:20 回复次数:2 
问一个关于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 编辑 ]
搜索更多相关主题的帖子: next 
2012-01-18 19:12
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:20 
程序代码:
#include <stdlib.h>

typedef struct NodeTag Node;

struct NodeTag {
   int data;
   Node* next;
} *head = 0, *tail = 0;

Node* PushFront(int data) {
   Node* newNode = malloc(sizeof(Node));
   newNode->data = data;
   newNode->next = head;
   head = newNode;
   if (tail == 0)
      tail = newNode;
   return newNode;
}

Node* PushBack(int data) {
   Node* newNode = malloc(sizeof(Node));
   newNode->data = data;
   newNode->next = 0;
   if (tail != 0)
      tail->next = newNode;
   tail = newNode;
   if (head == 0)
      head = newNode;
   return newNode;
}


[ 本帖最后由 lz1091914999 于 2012-1-19 01:46 编辑 ]

My life is brilliant
2012-01-19 01:42
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
收藏
得分:0 
回复 2楼 lz1091914999
谢谢贴代码,两个都是看上去简单明了

The quieter you become, the more you can hear
2012-01-19 09:25
快速回复:问一个关于Local Reference来构建链表的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036875 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved