几周前我才听说链表,现在我开始关注循环链表。问题很简单:在只有一个元素的循环列表中,下一个节点是自己,即它链接回自己还是空?因为如果我尝试在下一个节点位置添加新元素,我也将覆盖当前节点(如果列表只有一个元素并且它链接回自己,则为第一个节点)。
谢谢你。
在只有一个元素的循环列表中,下一个节点就是它自己,即它链接回自己还是空?
下一个节点是他自己,而不是
NULL
。
如果我尝试在下一个节点位置添加新元素,我也将覆盖当前节点...
如果当前只有一个节点,要添加新节点,相当于在其末尾添加注释。
New->next = Cur; // same as: New->next = Rear->next;
Prev->next = New; // same as: Rear->next = New;
Rear = New;
查看此演示文稿了解更多详细信息。
我们实际上可以将 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;
}