关于链表:C-单链表头插法尾插法删除指定值结点

先上代码

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

typedef struct nodeList {
    int data; //数据域
    struct nodeList *next; //指针域
} nodeList;

//遍历链表
void TraverseList(struct nodeList *head)
{
    while(head != NULL){
        printf("%d \n",head->data);
        head=head->next;
    }
}
//头插法
nodeList *HeadCreatList(struct nodeList *head, int n)
{
    struct nodeList *node;
    for (int i = 0; i < n; ++i)
    {
        node=(struct nodeList *)malloc(sizeof(struct nodeList));
        node->data = i;
        node->next = head->next;
        head->next = node;
    }
    head->data = n;
    return head;
}
//尾插法
nodeList *TailCreatList(struct nodeList *head, int n)
{
    struct nodeList *node,*end;
    end = head;
    for (int i = 0; i < n; ++i)
    {
        node=(struct nodeList *)malloc(sizeof(struct nodeList));
        node->data = i;
        end->next  = node;
        end           = node;
    }
    head->data = n;
    return head;
}
//删除某个值
nodeList *deleteFromList(struct nodeList *head, int target)
{
    struct nodeList *pre,*tmp;
    int count=0;
    tmp = head;
    pre = head;
    head= head->next;

    while(head != NULL){
        if (head->data == target){
            pre->next = head->next;            
            count--;
        }else{
            pre = head;                
            count++;
        }
        head= head->next;
    }
    tmp->data = count;
    return tmp;
}

int main()
{
    struct nodeList *head,*node;
    
    head=(struct nodeList *)malloc(sizeof(struct nodeList));
    //头结点
    //head->data = NULL;
    head->next = NULL;
    //头插法
    head = HeadCreatList(head, 5);
    printf("头插法: \n");
    TraverseList(head);
    //尾插法
    head = TailCreatList(head, 5);
    printf("尾插法: \n");
    TraverseList(head);
    //删除
    head = deleteFromList(head,2);
    printf("删除2: \n");
    TraverseList(head);
    return 0;
}

执行后果:

头插法,新结点始终在头结点之后,外围在于:

node->data = i;
node->next = head->next;
head->next = node;

尾插法,新结点始终在尾结点之后,外围在于:

node->data = i;
end->next  = node;
end        = node;

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理