简单 双向链表得增删改查 c++描述

2019 精帖
0 633

简单 双向链表得增删改查 c++描述

class node{
public :
    int data;
    node * next;
    node * prev;
};
#include"node.h"
class relink{
private :
    node * head;//首节点
    node * tail;//尾节点

public:
    relink(){
        head=new node();//初始化,不做数据得处理
        tail=new node();
        head->next=tail;
        head->prev=NULL;
        tail->next=NULL;
        tail->prev=head;
    }
    void add(int data);//增
    void del(int data);//删
    void edit(int olddatda,int newdata);//;改
    node * getnode(int data);//查
    void print();//循序打印
};
#include<iostream>
#include "relink.h"
using namespace std;
void relink::add(int data){
    node * end=tail;
    node * p=tail->prev;
    node * n =new node();
    n->data=data;
    n->prev=p;
    n->next=end;
    p->next=n;
    end->prev=n;
}
void relink::print(){
    node * n=head;
    while(n->next->next!=NULL){
        cout<<n->next->data<<endl;
        n=n->next;
    }
}
void relink::edit(int olddata,int newdata){
    node * n=head;
    while(n->next->next!=NULL){
        if(n->next->data==olddata){
            n->next->data=newdata;
            return;
        }
        n=n->next;
    }
}
void relink::del(int data){
    node * n=head->next;
    while(n->next!=NULL){
        if(n->data==data){
            node * pr  = n->prev;
            node * old = n->next;
            pr->next=old;
            old->prev=pr;
            return;
        }
        n=n->next;
    }
}
node * relink::getnode(int data){
    node * n=head;
    while(n->next->next!=NULL){
        if(n->next->data==data){
            return n->next;
        }
        n=n->next;
    }
    return NULL;
}
int main(){
    relink * rl=new relink();
    rl->add(0);
    rl->add(1);
    rl->add(2);
    rl->edit(2,23);
    rl->del(23);
    rl->print();
    node * n=rl->getnode(1);
    if(n!=NULL){
        cout<<"get:"<<n->data<<endl;
    }
    return 1;
}

QQ截图20181129192230.png


留言(0)
加载更多
猜你喜欢
  • blog 十种排序算法理解(前五)

    十种排序算法理解(前五)1.冒泡排序冒泡排序是一种的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。算法:比较相邻的元素。如果第一个比第二个大,就交换它们两个;对每一对相邻元素作同样的工作
  • blog JavaScript splice() 方法

    定义和用法splice() 方法/从数组中添加/除项目,然后返回被除的项目。注意:该方法会变原始数组。语法arrayObject.splice(index,howmany,item1,.....,itemX)参数index必需。
  • ofc 例模式的5种实现方法-设计模式

    例模式的5种实现方法-设计模式
  • ofc layui table选事件监听以及选中数据获取

    layui table选事件监听以及选中数据获取
  • blog 数据结构和算法-判断是否有环 求环的入口地址(java)

    问题:如上图的一个,如何判断一个中是否存在环,以及如何求出环的入口以及何如求出的长度。 方案一:利用hash         首先准备一个hash如hashMap等,然后从头部
  • blog 什么是调栈?

    对于栈,一般来讲是先进后出。而所谓 调栈 则是在栈的 先进后出 基础之上额外添加一个特性:从栈顶到栈底的元素是严格递(or递减)。那么具体的进栈过程如下:1.对于调递栈,若当前进栈元素为 e,从栈顶开始遍历元素,把小于 e 或者等于
  • blog 数据结构与算法-反转-递归法

    反转 有一个t如下: t = 1->2->3->4->5->6->7->8->9 写一个方法反转t如下: 1<-2<-3<-4<-5<
  • blog 蓝桥试题-兰顿蚂蚁

    问题:兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种。  平面上的正方形格子被填上黑色或白色。在其中一格正方形内有一只“蚂蚁”。  蚂蚁的头部朝为:上下左右其中一方。  蚂蚁的移动规则十分:  若蚂蚁在黑格
  • blog 二叉树除节点 c++

    二叉树除节点 c++先看一个的树图除节点是分以下几种情况: 1.待节点为叶子节点:此种情况下直接除叶子节点即可 2.待节点只有左子树,或只有右子树,那么将左子树或右子树的根节点替换该节点即可 3.待节点既有
  • blog spring-boot整合mybatis

    1.项目结构2.pom文件依赖<?xml version='1.0' encoding='UTF-8'?><project xmlns='http://maven.apache.org/POM/4.0.0' xmlns:xsi='http: