1. 程式人生 > >循環鏈表

循環鏈表

oid lis ret main 如果 實現 結束 urn 是否

  將單鏈表中終端節點的指針端由空指針改為指向頭結點,就使整個單鏈表形成一個環,這種頭尾相連的單鏈表稱為單循環鏈表,簡稱循環鏈表(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; }

循環鏈表