數據結構C語言實現----從鏈表中刪除結點


代碼如下:

#include<stdio.h>
#include<stdlib.h>

typedef struct Node
{
    char date;
    struct Node *next;
}Node , *LinkList;
//創建鏈表
LinkList creat_linklist(int n)
{
    LinkList New_node,Tail_node;
    LinkList Head_node = NULL;
    char c;

    for (size_t i = 0; i < n; i++)
    {
        printf("請輸入在第%d個結點存入的數據:",i+1);
        scanf("%c",&c);
        fflush(stdin);
        New_node = (LinkList)malloc( sizeof(Node) );
        New_node->date = c;
        New_node->next = NULL;

        if (Head_node == NULL)
        {
            Head_node = New_node;
        }else
        {
            Tail_node->next = New_node;
        }
        Tail_node = New_node;
    }
    return Head_node;
}
//從鏈表中刪除結點
void delelink(LinkList *List , int m)
{
    LinkList dele_node = *List;//復制一條鏈表用於找到要刪除的結點
    for (size_t i = 1; i <m ; i++)//找到要刪除的結點
    {
        dele_node = dele_node->next;
    }
    if (m==1)
    {//如果要刪除的是第一個結點,就直接把頭指針連接到第二個結點上
        *List = dele_node->next;
        free(dele_node);//注意釋放刪除的結點
    }else
    {//如果刪除的不是第一個節點,找出要刪除結點的前一個和后一個結點並連接起來
        LinkList befor_node = *List;//復制一條鏈表用於找到刪除結點的前一個結點
        for (size_t i = 1; i<m-1; i++,befor_node = befor_node->next)
        {
        }
        befor_node->next = dele_node->next;//連接前后兩個結點
        free(dele_node);//注意釋放刪除的結點
    }
}
int main()
{
    int n;
    char c;
    LinkList List , List2;
    //List用於第一次打印單鏈表,List2用於第二次打印單鏈表
    printf("請輸入結點個數:");
    scanf("%d",&n);
    fflush(stdin);
    List = creat_linklist(n);
    List2 = List;//復制一遍鏈表,第一次打印鏈表后鏈表后頭指針會直接指向NULL,導致第二次打印失敗
    printf("打印單鏈表:");
    while ( List != NULL )
    {
        printf("%c" , List->date);
        List = List->next;
    }
    putchar('\n');
    printf("請輸入要刪除的結點:");
    scanf("%d",&n);
    fflush(stdin);
    delelink(&List2 , n);
    printf("打印單鏈表:");
    while ( List2 != NULL )
    {
        printf("%c" , List2->date);
        List2 = List2->next;
    }
    return 0;
}

  

運行結果:

 


免責聲明!

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



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