新手向链表及其基本操作的代码实现(C++)

链表

一、链表的逻辑,存储结构

链表由链表头节点及其他节点构成。其中每一个节点都有其对应的数据和指向下一元素的指针。

二、链表的代码实现

在这里插入图片描述

三、实现简单的链表

在这里插入图片描述

在这里插入图片描述


三、链表的操作

一、添加节点至链表头部


实现思路:
1.将数据写入一个新建的节点
2.将表头指向的地址(即首个节点的地址)写入新建的节点
3.将表头指向的地址改为新建的节点


代码:

#include<iostream>
using namespace std;

struct Node{
   
    int data;//数据
    struct Node* next;//指向下一数据元素的指针
};
struct Node* head;//链表头

void Insert(int _data){
   
    Node* temp = new Node();
    temp->data = _data;//写入数据
    temp->next = head;//写入首位节点指针,使节点联结原首各节点。
    head = temp;//使链表头指向该节点
}

void Print(){
   
    Node* temp = head;
    cout<<"List is:";
    while(temp!=NULL){
   
        cout<<" "<<temp->data;//输出当前节点的数据
        temp = temp->next;//使该临时节点指向下一节点
    }
    cout<<endl;
}

int main (){
   
    head = NULL; //设置链表头为空指针

    Insert(1);//在首位插入节点
    Insert(2);
    Insert(3);
    Insert(4);
    Print();
    //DONE
}

运行结果:
在这里插入图片描述

二、任意位置插入节点


实现思路:
1.将数据写入一个新建的节点
2.如果不是插入到首位,则取出要插入位置的前一位的节点中保存的下一节点地址,赋给新建节点,使得新建节点与下一节点联结。如果插入到第一位,那么将节点指向的地址指向表头,然后将表头指向该节点。
3.将前一位节点的下一节点地址修改为新建节点的地址,使得新建节点与前一节点形成联结。


代码:

#include<iostream>
using namespace std;

struct Node{
   
    int data;//数据
    struct Node* next;//指向下一数据元素的指针
};
struct Node* head;//链表头

void Insert(int pos,int _data){
   
    Node* temp = new Node();
    temp->data = _data;//写入数据
    temp->next = NULL;

    if(pos == 1){
   //插入到首位的情况
        temp->next = head;
        head = temp;
    }else{
   //插入到非首位的情况
        Node* temp2 = head;
        for(int i =0;i<pos-2;i++){
   //循环到插入位前一位
            temp2 = temp2->next;
        }
        if(temp2 == NULL) exit(0);//插入位置非法
        
        temp->next = temp2->next;//将插入节点指向的地址修改为下一节点(即插入位置前一节点保存的地址)
        temp2->next = temp;//将前一位节点指向的地址改为该节点的地址。
    }

}

void Print(
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值