向仅包含一个节点的循环链表添加一个节点

问题描述 投票:0回答:2

几周前我才听说链表,现在我开始关注循环链表。问题很简单:在只有一个元素的循环列表中,下一个节点是自己,即它链接回自己还是空?因为如果我尝试在下一个节点位置添加新元素,我也将覆盖当前节点(如果列表只有一个元素并且它链接回自己,则为第一个节点)。

谢谢你。

linked-list circular-list
2个回答
0
投票

在只有一个元素的循环列表中,下一个节点就是它自己,即它链接回自己还是空?

下一个节点是他自己,而不是

NULL

enter image description here

如果我尝试在下一个节点位置添加新元素,我也将覆盖当前节点...

如果当前只有一个节点,要添加新节点,相当于在其末尾添加注释。

New->next = Cur;    // same as: New->next = Rear->next;
Prev->next = New;   // same as: Rear->next = New;
Rear = New;

查看此演示文稿了解更多详细信息。


0
投票

我们实际上可以将 next 和 previous 指针指向同一个 Node。这就是为什么它被称为自引用结构。这是一个圆形的例子 只有一个元素的链表。

/* double circular linked list with one Node (element) */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>


// self referential structure
typedef struct Node {
     struct Node *previous;    // pointer to the previous Node
     double element;        // the element
     struct Node *next;     // pointer to the next Node
} Node;

// print linked list
void printLinklis(Node *Head)      {
    
    Node *temp = Head;

    do  {
        printf("%p %.2lf %p\n",temp->previous,temp->element,temp);
        usleep(892000);
        fflush(stdout);
        temp = temp->next;
    } while (temp->next != Head->next);

    printf("\n");

}

int main(void)       {


    Node *Head = NULL;
    Node n1;

    // a single element doubly-circular linked list
    Head = &n1;  
    n1.previous = &n1;   // previous pointer pointing to iself
    n1.element = 15;     // the element;
    n1.next = &n1;       // next pointer pointing to itself
    printf("\nCircular linked list: \n");
    printLinklis(Head);

    return 0;

} 
© www.soinside.com 2019 - 2024. All rights reserved.