1. 程式人生 > >連結串列中p->next=head->next;語句解析

連結串列中p->next=head->next;語句解析

在看到一些書上或者網上寫的不管是單鏈表還是雙向迴圈連結串列等,都會有p->next=q->next;或者p-next=head->next;

這裡q是尾指標,head是頭指標,p是指向新建結點的指標

該語句作用

這條語句的作用其實就是給新建結點找到它該有的位置

該語句在單鏈表下的頭插法是必須存在的,而在雙向迴圈下可有可無

1.單鏈表的頭插法下p-next=head->next;
LinkList InsertList_head(LinkList head)//頭插
{
    LinkList p;
    int i;
    head=(LinkList
)malloc(sizeof(LNode)); head->next=NULL; scanf("%d",&i); while(i!=0) { p=(LinkList)malloc(sizeof(LNode)); //scanf("%d",&p->data); p->data=i; p->next=head->next; head->next=p; scanf("%d",&i); } return head; }

比如以上是單鏈表的頭插法程式碼,假如將p->next=head->next;註釋了,此時沒有一條語句來確定p指向的新建結點是在前一結點之後的

2.雙向迴圈連結串列p-next=head->next;
LinkList MCreatlist_last(LinkList head,Elemtype n)//尾插法
    {
        LinkList p;
        LinkList q;//尾指標
        int i;
        head=(LinkList)malloc(sizeof(LNode));
        head->
next=head; head->prior=head; q=head; for(i=0;i<n;i++) { p=(LinkList)malloc(sizeof(LNode)); scanf("%d",&p->data); p->next=q->next; p->prior=q; q->next=p; q=p; } head->prior=q; return head; }

可通過以下圖來理解這條語句,任何連結串列都適用
這裡寫圖片描述

當新建了新的結點後,該結點的位置是無法找到的,當p->next指向q->next時,即該新建結點指向q的下一個結點使得p實現了插入到該結點(也算是p找到了它的位置)

為什麼說p->next=q->next;是可有可無的呢,因為其實是因為p->prior=q;這條語句也可有使得新建結點找到它的家,只是加了p->next=q->next;會更加完整,安全