c++单链表的创建、输出、插入、删除操作

混子来了

单链表的创建:

首先单链表的定义就不再赘述了,本文利用带头节点,尾插法的方法进行创建,同时注意头节点在此的重要性,即所有操作都要通过头节点来实现,头节点的值绝对不能被改变

  1. 结点的定义
struct ListNode//定义节点
{
    int m_key;
    ListNode* next;
}A;
  1. 由于我们需要一个头节点,所以我们就先创建一个头节点
    ListNode* head = NULL;
    head = new ListNode;
    head->next = NULL;
  1. 接下来就是创建一个单链表了
void createList(ListNode* pHead,int n)//创建单链表
{
   ListNode* p = pHead;//不能改变头节点
   for (int i = 1; i <= n; ++i)
   {
       ListNode* pNewNode = new ListNode;//申请一个新节点
       cin>>pNewNode->m_key; // 将新节点的数据域赋值
       pNewNode->next = NULL;//新节点的指针域置为空
       p->next = pNewNode; // 上一个节点的指针域指向这个新节点
       p = pNewNode; // p节点指向这个新节点
   }
}

单链表的输出:

单链表的输出比较简单,就是利用头节点,找到第一个节点,当节点不为空时,输出数据域,然后节点后移

void print(ListNode*phead)
{
    ListNode*p=phead->next;
    while(p!=NULL)
    {
        cout<<p->m_key<<" ";
        p=p->next;
    }
    cout<<endl;
}

单链表的插入:

还是直接上代码叭,有注释

void insertlist(ListNode*phead,int i,int e)
{
    ListNode*p=phead->next;//利用头节点找到第一个节点
    int j=0;
    while(p)
    {
        j++;//判断指针位置
        if(j<i-1)//将指针移到i-1位置
            p=p->next;
        else
            break;
    }
    //在i-1和i中间插入数据
    ListNode*s=new ListNode;//先建立新节点
    s->m_key=e;//新节点的数据域赋值
    s->next=p->next;//让新节点的指针域指向p节点的指针域的指向
    p->next=s;//p节点指向新建立的节点
}
//可以画个图理解一下,有一点点小绕,哈哈

单链表的删除:

同上,我太懒了,哈哈
删除第i个节点就是让第i-1个节点的指针域指向第i+1个节点

void deletelist(ListNode*phead,int k)
{
    ListNode*p=phead->next;//还是先找到第一个节点
    int j=0;
    while(p)//节点不为空时
    {
        j++;//判断指针位置
        if(j<k-1)//让指针到达第i-1个位置
            p=p->next;
        else
            break;
    }
    //删除第i个节点
    p->next=p->next->next;
}

来一个完整代码叭:

先创建单链表,输入插入的位置和值,输出,再输入删除的位置,输出
其实就是个搬运工,把上面的代码抄下来,蛤蛤蛤

#include <iostream>
using namespace std;

struct ListNode//定义节点
{
   int m_key;
   ListNode* next;
}A;
void createList(ListNode* pHead,int n)//创建单链表
{
   ListNode* p = pHead;//不能改变头节点
   for (int i = 1; i <= n; ++i)
   {
       ListNode* pNewNode = new ListNode;//申请一个新节点
       cin>>pNewNode->m_key; // 将新节点的数据域赋值
       pNewNode->next = NULL;//新节点的指针域置为空
       p->next = pNewNode; // 上一个节点的指针域指向这个新节点
       p = pNewNode; // p节点指向这个新节点
   }
}
void print(ListNode*phead)
{
   ListNode*p=phead->next;
   while(p!=NULL)
   {
       cout<<p->m_key<<" ";
       p=p->next;
   }
   cout<<endl;
}
void insertlist(ListNode*phead,int i,int e)
{
   ListNode*p=phead->next;
   int j=0;
   while(p)
   {
       j++;//判断指针位置
       if(j<i-1)//将指针移到i-1位置
           p=p->next;
       else
           break;
   }
   ListNode*s=new ListNode;//在i-1和i中间插入数据
   s->m_key=e;
   s->next=p->next;
   p->next=s;
}
void deletelist(ListNode*phead,int k)
{
   ListNode*p=phead->next;
   int j=0;
   while(p)
   {
       j++;
       if(j<k-1)
           p=p->next;
       else
           break;
   }
   p->next=p->next->next;
}
int main()
{
   int n;
   cin>>n;
   ListNode* head = NULL;
   head = new ListNode;
   head->next = NULL;
   createList(head,n);
   int i,e;
   cin>>i;
   cin>>e;
   insertlist(head,i,e);
   print(head);
   int k;
   cin>>k;
   deletelist(head,k);
   print(head);
   return 0;
}

还是给个运行的栗子叭
在这里插入图片描述
看了本文写的这几个,还有剩下的操作大家大概会了叭,我相信大嘎!!!
万水千山总是情,点个小赞行不行
阿里嘎多


版权声明:本文为qq_45449956原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。