记录C++简单链表插入实现

初学者有点成就感嘛

#include <iostream>
using namespace std;

struct Node{
    int data;
    Node* next;
};

//在链表的尾部插入一个节点
Node* appendNode(Node* LinkedListNode, int data){
    //这里要求传入的LinkedListNode只要是链表中的任意一个节点
    //传入头节点当然是最方便的,但是这样需要遍历整个链表才能添加上节点。
    //如果知道当前链表的最后一个节点当然是最方便的
    Node* newNode = new struct Node;
    while(LinkedListNode->next != nullptr){
        LinkedListNode = LinkedListNode->next;
    }
    LinkedListNode->next = newNode;
    newNode->next = nullptr;
    newNode->data = data;
    return newNode;   //最后将新节点的地址返回出去
}

//在链表的任意位置插入一个节点
void insertNode(Node* headNode, int index, int data){
    //headNode是指向存放数据头节点的指针,本身不存放数据
    Node* newNode = new Node;
    newNode->data = data;
    newNode->next = nullptr;
    //永远记住,优先处理最特殊的情况
    if(index == 0){
        newNode->next = headNode->next;
        headNode->next = newNode;
        return;
    }
    Node* temp = headNode;   //由于要反复修改节点数据,避免对头节点修改,采用临时变量
    for(int i = 0; i < index; ++i){
        if(temp->next == nullptr){
            cout << "Invalid insert, please check your index!" << endl;
            return;
        }
        temp = temp->next;
    }
    newNode->next = temp->next;
    temp->next = newNode;
}

void PrintLinkedList(Node* headNode){
    Node* temp = headNode;
    while(temp->next != nullptr){
        temp = temp->next;
        cout << temp->data << ' ';
    }
    cout << endl;
}

int main(){  
    struct Node head;     //这是链表的唯一标识,它不用于存储数据,只用来存储链表头节点的位置
    //请注意,直接声明一根指针是不会分配任何内存空间的,你无法对这根空指针进行访问,除了赋值
    head.next = nullptr;
    int index; int number;
    while(true){
        cout << "Insert(index, number)\nindex = ";
        cin >> index;
        cout << "number = ";
        cin >>number;
        if(index == -1){
            break;
        }
        insertNode(&head, index, number);
        PrintLinkedList(&head);
    }
    return 0;
}

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值