美文网首页
单向链表的创建、查找、删除、打印

单向链表的创建、查找、删除、打印

作者: 小小唯大大胖 | 来源:发表于2018-03-27 22:16 被阅读0次

链表结点的定义:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
1、单链表的创建
注意要创建头结点
ListNode create(int data,int len)//data[]输入的数组,len是输入数组长度
{
ListNode head,p,
q;//定义三个结点,首、中、尾
//head=(ListNode
)malloc(sizeof(ListNode));
head=new ListNode;//创建头节点
int i;
for(i=0;i<len;i++)
{
//p=(ListNode*)malloc(sizeof(ListNode));
p= new ListNode;//每次插入一个,就新建一个结点
p->m_nKey=data[i];
if(i==0)
{
head->m_pNext=p;//头结点
}
else
{
q->m_pNext=p;
}
q=p;
}
q->m_pNext=NULL;//链表最后一个指针为NULL
return head;
}
2、链表打印
void print_ListNode(ListNode *head)
{
ListNode *p;
if(head->m_pNext==NULL)
{
cout<<"链表为空"<<endl;
return;
}
p=head->m_pNext;
while(p!=NULL)
{
cout<<p->m_nKey<<" ";
p=p->m_pNext;
}
cout<<endl;
}
3、链表结点的删除
要找到删除结点前一结点的位置。从表头开始遍历,发现结点p的m_pNext指向要删除的结点i,于是我们可以把结点p的m_pNext指向i的下一个结点。指针调整后,就可以安全地删除结点i并保证链表没有断开。
ListNode delete_node(ListNode pListHead, int k)//要删除k,需要找到k值前一个节点
{
if(pListHead==NULL)
return NULL;
ListNode *p1=NULL;
ListNode *p2=NULL;
p1=pListHead;
if(p1->m_pNext->m_nKey==k)//删除的结点是第一个节点
{
p2=p1->m_pNext;
pListHead->m_pNext=p2->m_pNext;
delete p2;
return pListHead;
}
else //删除的结点是第一个节点

{
    while(p1->m_pNext!=NULL)
    {
        if(p1->m_pNext->m_nKey==k)
        {
            p2=p1->m_pNext;
            p1->m_pNext=p2->m_pNext;
            delete p2;
        }
        else
        {
            p1=p1->m_pNext;
        }
    }
}
return pListHead;

}
主函数如下:#include<stdio.h>

include<iostream>

include<vector>

include<map>

include<algorithm>

using namespace std;
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
ListNode *create(int *data,int len);
ListNode FindKthToTail(ListNode pListHead, int k);
void print_ListNode(ListNode *head) ;
int main()
{
int num,n;
while(cin>>num)
{
cout<<"输入"<<num<<"个整数:"<<endl;
int *data=new int[num];
for(int i=0;i<num;i++)
{
cin>>data[i];
}
ListNode head,p;
head=create(data,num);
cout<<"创建的链表为:"<<endl;
print_ListNode(head);
cout<<"输入删除的结点:"<<endl;
cin>>n;
p=delete_node(head,n);
cout<<"输入删除的结点后链表为:"<<endl;
print_ListNode(p);
}
return 0;
}

相关文章

  • 单向链表的创建、查找、删除、打印

    链表结点的定义:struct ListNode{int m_nKey;ListNode* m_pNex...

  • 单向链表算法

    单向链表 反转单向链表 单链表查找倒数第k个节点 单链表递归倒序打印 单链表排序 单链表删除重复节点

  • 数据结构与算法03-单向循环链表实现总结

    单向循环链表结构体设计 打印 尾插法创建链表 插入 删除 查索引

  • 链表

    单向链表 包含,创建,析构,指定位置插入,指定位置删除,反向链表,打印 双向链表 包含,创建,析构,指定位置后插入...

  • python 循环单向链表

    单向循环链表python实现 循环链表实现 头节点添加 尾节点添加 插入 删除 查找

  • 单向循环链表

    结构体 链表创建 插入 删除 打印

  • day03-双向链表

    双向链表: 单向链表只能单向查找,双向链表可以双向查找。 啥是双向链表? 双向链表可以双向查数据,所以就不存在单向...

  • C语言开发图书馆管理系统

    C语言开发图书馆管理系统 功能框架如下 管理系统主要使用了以下操作 单向链表的创建、增添、删除、遍历、查找、排序。...

  • 关于链表的预备知识

    定义结点 创建链表结点 连接链表各结点 打印链表结点的值 打印整个链表中的值 删除整个链表 在链表尾部加入结点 特...

  • 单向链表的基本操作

    参考 一步一步写算法(之单向链表) 1. 单向链表的数据结构 2. 创建链表 3. 增加节点 4. 删除节点

网友评论

      本文标题:单向链表的创建、查找、删除、打印

      本文链接:https://www.haomeiwen.com/subject/ielecftx.html