单链表 无头节点
就这书上代码敲了一边,加深印象,没有头结点的时候插入第一个就有所不同了,而删除时要找到前一个,注意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;
}