
非空的循环单链表head的尾结点p满足()。
非空循环单链表的尾结点 p 满足 p->next == head。这一条件是循环单链表的核心特征,通过尾结点指向头结点形成逻辑闭环,使链表从“线性结构”转化为“环形结构”。
在循环单链表中,每个结点包含数据域和指针域(next)。与普通单链表的关键区别在于:
普通单链表:尾结点的 next 指针为 NULL(空指针),表示链表结束;
循环单链表:尾结点的 next 指针指向头结点(head),形成“首尾相接”的环形结构,如图所示:
head → node1 → node2 → ... → p (尾结点) ↑ ↓ └────────────────────────┘
判断一个结点 p 是否为循环单链表的尾结点,需同时满足两个条件:
p->next 指向头结点(p->next == head);
从 p 出发遍历,经过若干步后能回到 p(即链表无断裂)。
但在实际编程中,第一个条件已足够判定——因为非空循环单链表的逻辑定义就是“尾结点指向头结点”。例如,初始化循环单链表时,若只有一个结点(头结点即尾结点),则 head->next = head。
| 链表类型 | 尾结点特征 | 典型应用场景 |
|---|---|---|
| 普通单链表 | p->next == NULL | 动态存储线性数据(如队列) |
| 循环单链表 | p->next == head | 需循环访问所有元素(如约瑟夫环问题) |
| 双向循环链表 | p->next == head 且 head->prev == p | 需双向遍历(如操作系统进程调度) |
以下 C 语言代码片段可判断循环单链表的尾结点:
C