单链表 无头节点

来源:互联网 发布:java 私钥加密证书 编辑:程序博客网 时间:2024/04/27 17:13

单链表 无头节点

就这书上代码敲了一边,加深印象,没有头结点的时候插入第一个就有所不同了,而删除时要找到前一个,注意current->link==null 就这样。

代码

#include <iostream>#include <cstdio>#include <cstdlib>using namespace std;struct linknode{    int data;    linknode *link;    linknode(int a,linknode* p=NULL)    {        data=a;        link=p;    }};class List{private:    linknode* first;public:    bool Insert(int i,int &x);    bool Remove(int i,int &x);};bool List::Insert(int i,int &x)//插到i之后,如果i=0则插到第一个之前{    if(first==NULL||i==0)    {        linknode *newnode=new linknode(x);        if(newnode==NULL)        {            cerr<<"错误!\n";            exit(1);        }        newnode->link=first;        first=newnode;    }    else    {        linknode *current=first;        for(int k=1; k<i; k++)        {            if(current==NULL) break;            else current=current->link;        }        if(current==NULL)        {            cerr<<"无效\n";            return false;        }        else        {            linknode *newnode=new linknode(x);            newnode->link=current->link;            current->link=newnode;        }    }    return true;}bool List::Remove(int i,int &x){    linknode *del,*current;    if(i<=i)    {        del=first;        first=first->link;    }    else    {        current=first;        for(int k=1; k<i-1; k++)            if(current==NULL) break;            else current=current->link;        if(current==NULL||current->link==NULL)        {            cerr<<"无效\n";            return false;        }        del=current->link;        current->link=del->link;    }    x=del->data;    delete del;    return true;}//在插入操作时,注意空表或者第一个之前。在删除操作时,注意删除第一个节点,以及代码的简便。int main(){    return 0;}
0 0
原创粉丝点击