如何實現單鏈表的插入和刪除操作


單鏈表插入

(1)找到位置p(ai-1

(2)生成新結點s,數據域賦值

(3)新結點指針域指向ai(ai的地址存放在ai-1的指針域

(4)ai-1的指針域指向新結點s

直接上代碼:

Status InsertList(LinkList head,DataType x,int i)
{
    ListNode* p;
    p=head;
    int j=1;
    while(p && j<i)
    {
        p=p->next;
        j++;
    }    //p現在是ai-1這個結點
    if(!p || j>i)
    {
        printf("Position Error!");
        return ERROR;
    }
    ListNode* s=(ListNode*)malloc(sizeof(ListNode));
    s->data=x;
    s->next=p->next
    p->next=s;
    return OK;
}

刪除單鏈表結點:

(1)找到要刪除的結點前一個結點p(原因是刪除結點的位置在前一個結點的指針域)

(2)把p->next指向ai的下一個結點(把ai從鏈上摘除)

(3)釋放ai空間

直接粗暴上代碼:

Status DeleteList(LinkList head,int i)
{
    ListNode* p,*r;   //聲明兩個指針,一個用來找到刪除結點前的結點。 一個用來存儲要刪除結點的后繼結點的地址的。
    p=head;
    int j=1;
    while(p->next && j<i)    //這里要判斷p->next得是真(也就是說得有后繼結點也就是要刪除的結點)。。。//不要忘了這個方式 p=p->next; 指針在移動
    {
        p=p->next;
        j++;
    }
    if(p->next ==NULL || j>i)
    {
        printf("Position Error!");
        return ERROR;
    }
    r=p->next;       //把刪除結點的首地址給臨時結點 這樣就能把刪除結點的指針域保存下來  
    p->next=r->next;  //刪除結點的指針域 指向 刪除結點后繼結點的首地址 free(r);          //記得釋放資源
    retuen OK;
}

刪除結點必須保證在連邊長度內。即1<=i<=n;

刪除單鏈表頭元素:

兩步:(1)保存頭元素的指針域(即頭元素的后繼節點的首地址)

(2)頭結點指針域指向頭元素的后繼節點。

void RemoveHead(LinkList head)
{
    ListNode * p;
    p=head->next;
    head->next=p->next;
    free(p);
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM