单链表的插入与删除(标准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;
}
目录
相关文章
|
6月前
二叉树的创建、插入和删除
二叉树的创建、插入和删除
32 1
|
7月前
|
存储
单链表相关操作(插入,删除,查找)
单链表相关操作(插入,删除,查找)
63 4
|
7月前
双链表的插入,删除以及遍历
双链表的插入,删除以及遍历
51 6
|
7月前
顺序表的插入,删除,修改和查找(详细解析)
顺序表的插入,删除,修改和查找(详细解析)
88 5
|
7月前
|
存储
数据结构:图文详解单链表的各种操作(头插法,尾插法,任意位置插入,删除节点,查询节点,求链表的长度,清空链表)
数据结构:图文详解单链表的各种操作(头插法,尾插法,任意位置插入,删除节点,查询节点,求链表的长度,清空链表)
690 0
|
7月前
|
存储
数据结构:图文详解双向链表的各种操作(头插法,尾插法,任意位置插入,查询节点,删除节点,求链表的长度... ...)
数据结构:图文详解双向链表的各种操作(头插法,尾插法,任意位置插入,查询节点,删除节点,求链表的长度... ...)
929 0
|
存储 C++
链表操作:插入、删除与遍历
(笔者画图不易呜呜)链表是一种基本的数据结构,它可以用来存储一系列的元素,并且支持灵活的插入、删除操作。在计算机科学中,链表常常用于构建更复杂的数据结构,如栈、队列以及图等。
342 0
链表学习(链表的创建,插入,删除,查找,遍历)
链表学习(链表的创建,插入,删除,查找,遍历)
132 0
|
存储 C语言 C++
顺序表的插入、删除和查找(四)
详细介绍了数据结构中的顺序表
260 0