簡體   English   中英

C鏈表和指針

[英]C linked list and pointers

有人可以用指針解釋這段代碼的作用嗎:

    while(terminate== 0)
    {
        s->value=s->next->value; 
        if ((s->next->next)==NULL)
        {
            free(s->next); 
            s->next=NULL;
            terminate= 1;
        }
        s=s->next;
    }

其中s作為參數傳遞為:set_el * s,並具有以下結構:

 typedef struct set_el
 {
   int value;
    struct set_el* next;
 } set_el;

如果輸入NULL,則由於s->value非法,將導致分段錯誤。

在大小為1的列表上,由於s-> next-> value是非法的,同樣會失敗。

在具有循環的列表(例如a> b> a ...)上,它將無限循環,因為s-> next-> next永遠不會為NULL

最后,在大小為2或更大的鏈接列表上,它將遍歷該列表,將下一個節點的值對應到當前節點,並刪除最后一個節點。

有效地,它將以一種非常about回的方式“刪除”列表中的第一個節點。 (我們釋放了最后一個節點的內存,但將值復制到了列表中。新列表要短1個節點,並且第一個節點中沒有值)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM