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

简介: 单链表的插入与删除(标准C)
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
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&&i<x)
    {
        p=p->next;
        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;j<i-1;j++)
    {
        p=p->next;
    }
    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;j<i-1;j++)
    {
        p=p->next;
    }
    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;
}
目录
相关文章
|
5月前
|
存储
数据结构:图文详解单链表的各种操作(头插法,尾插法,任意位置插入,删除节点,查询节点,求链表的长度,清空链表)
数据结构:图文详解单链表的各种操作(头插法,尾插法,任意位置插入,删除节点,查询节点,求链表的长度,清空链表)
258 0
|
9月前
|
存储 C++
链表操作:插入、删除与遍历
(笔者画图不易呜呜)链表是一种基本的数据结构,它可以用来存储一系列的元素,并且支持灵活的插入、删除操作。在计算机科学中,链表常常用于构建更复杂的数据结构,如栈、队列以及图等。
193 0
顺序表头插头删尾插尾删以及任意位置的插入删除和顺序表中的查找
顺序表头插头删尾插尾删以及任意位置的插入删除和顺序表中的查找
|
10月前
链表学习(链表的创建,插入,删除,查找,遍历)
链表学习(链表的创建,插入,删除,查找,遍历)
86 0
|
12月前
二叉排序树的建立、查找、插入、删除
二叉排序树的建立、查找、插入、删除
双链表全部知识总结(初始化、插入、删除、遍历)
双链表知识总结包括思路分析、代码实现
180 0
|
存储 C语言 C++
顺序表的插入、删除和查找(四)
详细介绍了数据结构中的顺序表
219 0
链表的插入与删除
链表的插入与删除
55 0
单链表任意位置插入
任意位置插入,第一个数据节点为0号下标

热门文章

最新文章