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

来源:互联网 发布:创业软件复牌消息 编辑:程序博客网 时间:2024/04/29 12:40

#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///////////////////


原创粉丝点击