计蒜客 数据结构 链表 C++

//链表的插入insert()和删除delete_node()还有输出,翻转everse()
#include<iostream>
using namespace std;
class Node {
public:
    int data;
    Node* next;
    Node(int _data) {
        data = _data;
        next = NULL;
    }
};
class LinkList {
private:
    Node* head;
public:
    LinkList() {
        head = NULL;
    }
    void insert(Node* node,int index){
    // 头指针为空,那么我们就让node成为头指针

		 if(head == NULL){
           head = node;
           return;
        }
     //第二种特殊情况,就是如果插入节点后的位置是链表首位,也就是index等于0的时候。
        if(index == 0){
            //如果节点插入后是链表首位,那么先让node的指针指向当前表头head,
            //完成node的插入,然后让node成为头结点,完成表头的更新,
            //然后用return语句结束函数
            node->next = head;
            head = node;
            return;
        }
        //*写在类名旁边,还是变量名旁边意思是相同的
            Node *current_node = head;
            int count = 0;
        while(current_node->next != NULL && count < index -1){
            current_node = current_node->next;
            count++;

        }
        if(count == index - 1){
               node->next = current_node->next;
               current_node->next = node;
        }

    }
        void output(){
        if(head == NULL){
            return;
        }
        Node *current_node = head;
        while(current_node != NULL){
            //节点数据的表示方式->data
            cout<<current_node->data<<" ";
            current_node = current_node->next;
        }
             //输出回车
             cout<<endl;
    }
     void delete_node(int index){
        if(head == NULL){
            return;
        }
        Node* current_node = head;
        int count = 0;
        if(index == 0){
            head = head->next;
            delete current_node;
            return;
        }
        while(current_node->next != NULL && count < index-1){
            current_node = current_node->next;
            count = count + 1;
        }
         //找到指定的节点,还有检测是不是删除最后一个节点
        if( count == index - 1 && current_node->next != NULL){
            Node* delete_node = current_node->next;
            current_node->next = delete_node->next;
            delete delete_node;
        }

    }
     void reverse(){
        if(head == NULL){
            return;
        }
        Node *next_node, *current_node;
        current_node = head->next;
        head->next = NULL;
        while(current_node != NULL){
            next_node = current_node->next;
            current_node->next =head;
            head = current_node;
            current_node = next_node;
        }
    }

};
int main() {
    LinkList linklist;
    for(int i = 1 ; i <= 10 ; i++){
        Node *node = new Node(i);
        linklist.insert(node,i-1);
    }
    linklist.output();
    linklist.delete_node(5);
    linklist.output();
    linklist.reverse();
    linklist.output();
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值