超过1个链表 - 添加元素

时间:2013-10-12 20:26:56

标签: c list pointers

我需要制作一个包含(最多)50个链接列表的程序。基本上,我的程序会生成一些消息,并根据字符串前面的指示符,我需要将消息放在正确的链接列表中。

我不知道它是否足够清楚,但我会尝试展示我的部分代码(重要部分)。我在链表中​​添加新元素(在顶部)的功能如下:

void InsertLL (News p, char M[]) {
    char * text = malloc(strlen(M)+1);
    strcpy(text, M);
    News s,t;
    t = malloc(sizeof(struct List));
    t-> Text = text;
    s = p;
    p = t;
    p-> next = s;
 }

我的struct List(我的列表元素的类型)包含一个char指针(称为text)和一个指向列表下一个元素的指针。

模拟我的程序,假设我收到一条消息,需要将其放入链接列表中,其中指针p [0]指向begin。所以我创建了一个新元素(忘记列表为空的情况,我已经创建了这个元素)并使用我显示的函数添加到列表顶部。 现在,假设我收到了另一条需要放入下一个指针p [1]的消息。如果我打印p [0] - >文字,我得到了p [1] - > Text。

的文字

我的意思是,如果我在p [i]指向的列表中添加一个新元素,那么之前的所有texts p[i] -> Texts都会获得这个新元素的新文本​​。我不知道我做错了什么。

我不知道是否足以帮助我,如果需要更多信息,请告诉我。

1 个答案:

答案 0 :(得分:1)

您的代码问题是您没有维护节点列表。你一次又一次地覆盖同一个节点。

ALGO:

  1. 如果没有节点则创建一个。

  2. 如果存在节点,则导航到结束节点。(您可以使用tail 指针,以便更快地访问)。

  3. 在最后添加节点。

  4. 创建节点:

    • 声明节点类型指针。

    • 为其分配内存。

    • 更新节点的内容。

    • 将节点的下一个指针设置为null。

    • 将此节点添加到列表的末尾。

    离。在节点1和节点2的列表中插入节点3。

    Link list demo

    这是您可以使用的一般方法

    typedef struct node{
        int val;   //you can use your text here
        struct node* next;
        }NODE;
    
    struct node* head=0;
    
    int addNode(int v){
        if(head==0){                              //checking for empty node.
            struct node* n=malloc(sizeof(NODE));
            n->val=v;
            head=n;
        }
        else{
            struct node* temp=head;
            while(temp->next != 0)    //Navigating till end
            {
                temp=temp->next;
            }
            struct node* n=malloc(sizeof(NODE)); //allocating memory
            n->val=v;            //you need to use strcpy for string here.                         
            temp->next=n;       //adjusting pointers
            n->next=0;
        }
    }
    

    您可以查看由我创建的双链表http://ideone.com/s6TtUX

    的演示