| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
m47c
10年前发布

单链表的插入和删除 C++实现

#pragma once         ////定义链表和节点///////////////////////////////////////////         ////节点类    class Node    {    public:        ////methods        Node(void);        Node(int data);        ~Node(void);            /////members        Node* next;        int data;    };        ////链表类    class MyLinkTable{    public:        //////methods        void RemovdeAt(int position,Node* head);        void Add(Node* node,Node* head);        void AddAfter(int position,Node* head,Node* node);        bool IsEmpty(Node* head);        void PrintNodes(Node* head);        /////members        Node* head;    };    ///////////////////////////////////////////////实现///////////////////         #include "StdAfx.h"    #include "Node.h"    #include <iostream>        /////////node methods/////////////    Node::Node(void)    {        Node::data=0;        Node::next=NULL;    }        Node::Node(int data)    {        Node::data = data;        Node::next=NULL;    }        Node::~Node(void)    {    }        //////////////////////end//////////////////        ///////////linkTable methods//////////////         ////移除某个节点//////////////////    void MyLinkTable::RemovdeAt(int position,Node* head){    if(this->IsEmpty(head) || position < 0){    return;    }        ////如果要删除头结点    if(position == 0)    {    Node* n = head;    head=head->next;    delete n;    MyLinkTable::head = head;    return;    }        Node* p = new Node;    p=head;    for(int i=0;i<position-1&&p!=NULL;p=p->next,i++);        if(p!=NULL)    {    Node* n = p->next;    p->next = p->next->next;    free(n);    }    }         /////在末尾追加节点    void MyLinkTable::Add(Node* node,Node* head){        if(this->IsEmpty(head))        {        return;        }    Node* p = head;    while(p->next)    {    p=p->next;    }        p->next = node;    node->next = NULL;        }    /////在制定位置后面添加节点    void MyLinkTable::AddAfter(int position,Node* head,Node* node){        if(this->IsEmpty(head)){        return;        }    Node* p = head;    for(int i = 0;i < position && p->next != NULL;p=p->next,i ++);        node->next = p->next;    p->next = node;        }              ////判断链表是否非空    bool MyLinkTable::IsEmpty(Node* head){    return head==NULL;    }              ////打印链表    void MyLinkTable::PrintNodes(Node* head){            std::cout<<std::endl;        while(head){            std::cout<<head->data<<" ";        head=head->next;        }            }        ///////////////end///////////////////