单链表的插入与删除(标准C)

单链表的插入与删除(标准C),第1张

单链表的插入与删除(标准C)
#include 
#include 
#include 
using namespace std;
typedef struct LNode{
    int data;
    struct LNode *next;
}LNode,*linkList;
//头插
int List_HeadInsert(linkList &L)
{
    LNode *s;int x;
    L=(linkList)malloc(sizeof(LNode));
    L->next=NULL;
    scanf("%d",&x);
    while(x!=4444)//输入4444表示退出输入
    {
        s=(LNode *)malloc(sizeof(LNode));
        s->data=x;
        s->next=L->next;
        L->next=s;
        scanf("%d",&x);
    }
}
//尾插
int List_TailInsert(linkList &L)
{
    LNode *s;int x;
    L=(linkList)malloc(sizeof(LNode));//此处L为尾指针
    scanf("%d",&x);
    while(x!=4444)
    {
        s=(LNode *)malloc(sizeof(LNode));
        s->data=x;
        L->next=s;//此处直接给s
        L=s;
        scanf("%d",&x);
    }
    return L->data;
}
//显示打出
int show_list(linkList L)
{
    LNode *p=L->next;
    while(p!=NULL)
    {
        printf("%d ",p->data);
        p=p->next;
    }
    printf("n");
}
//删除 以头插为创建方式
void Destroy_List(linkList &L)
{
    LNode *s;
    s=(LNode *)malloc(sizeof(LNode));
    while(L->next!=NULL)
    {
        s=L->next;
        L=s->next;
        free(s);
    }
}
//输入序号查找
int Get_listElem(linkList &L,int x)
{
    int i=1;
    LNode *p=L->next;
    if(x==0)
        return L->data;
    if(x<1)
        return NULL;
    while(p&&inext;
        i++;
    }
    return p->data;
}
//输入值查找
int Get_listNum(linkList L,int x)
{
    LNode *p=L->next;
    int i=0;
    while(p)
    {
        i++;
        if(p->data==x)
             return i;
        p=p->next;
    }
}
//插入节点
int Sert_listNode(linkList L,int i,int x)
{
    LNode *p=L->next;
    LNode *q;
    q=(linkList)malloc(sizeof(LNode));
    int j;
    for(j=1;jnext;
    }
    q->data=x;
    q->next=p->next;
    p->next=q;
}
//删除第i个节点
int Delete_listNode(linkList L,int i)
{
    LNode *p=L->next;LNode *q;
    q=(linkList)malloc(sizeof(LNode));
    for(int j=1;jnext;
    }
    q=p->next;
    p->next=q->next;
    free(q);
}
//删除所有值为x的节点
int Delete_listNodes(linkList L,int i)
{
     LNode *p=L;LNode *q;
     q=(linkList)malloc(sizeof(LNode));
     q=p->next;
     while(q!=NULL)
     {
         if(q->data==i)
         {
             p->next=q->next;
             free(q);
             q=p->next;
         }
         else{
         p=q;
         q=q->next;
         }
     }
}
//删除重复值节点
int Delete_listNodemod(linkList L)
{
    LNode  *p=L->next; LNode  *q; LNode  *ptr;
    while(p!=NULL)
    {
        q=p,ptr=p->next;
        while(ptr!=NULL)
        {
            if(ptr->data==p->data)
            {
                q->next=ptr->next;
                free(ptr);
                ptr=q->next;
            }
            else
            {
                q=ptr;
                ptr=ptr->next;
            }
        }
        p=p->next;
    }
}
int main()
{
    LNode *L;
    List_HeadInsert(L);
    show_list(L);
    printf("%d n",Get_listElem(L,2));
    printf("%d n",Get_listNum(L,1));
    Sert_listNode(L,4,5);
    show_list(L);
    Delete_listNode(L,2);
    show_list(L);
    Delete_listNodes(L,5);
    show_list(L);
    Delete_listNodemod(L);
    show_list(L);
    cout << "Hello world!" << endl;
    return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5702647.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存