标签:height 技术分享 nod 示意图 .com 需要 scanf width idt
将单链表中终端节点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相连的单链表称为单循环链表,简称循环链表(circular linked list)。
循环链表解决了从一个节点,访问到链表的全部节点的问题。循环链表和单链表的主要差异就在于循环的判断条件上,原来是判断p->next是否为空,现在则是p->next不等于头结点,则循环结束。
在单链表中,访问第一个节点需要O(1)的时间,但对于访问最后一个节点,却因为需要将单链表全部扫描一遍,所以需要O(n)的时间。如果用循环链表,我们只需用指向终端节点的尾指针来表示循环链表,此时查找开始节点和终端节点就都很方便了。
下面是示意图:
下面是实现输出头结点和终端节点的代码:
#include<stdio.h> #include<stdlib.h> struct node{ int a; struct node *next; }; typedef struct node *LinkList; void CreateList_T(LinkList head, int num) { LinkList p, rear = head; while(num--){ p = new node; scanf("%d", &p->a); rear->next = p; rear = p; } rear->next = NULL; } int main() { int num; LinkList head = new node, rear; scanf("%d", &num); CreateList_T(head, num); for(rear = head; rear->next; rear = rear->next); rear->next = head; printf("%d\n", rear->a); printf("%d\n", rear->next->next->a); return 0; }
标签:height 技术分享 nod 示意图 .com 需要 scanf width idt
原文地址:http://www.cnblogs.com/didideblog/p/7061531.html