求助,单链表问题~!
#include<iostream.h>
typedef int datatype;
typedef struct node * pointer;
struct node{
datatype data;
pointer next;
};
typedef pointer lklist;
lklist initlist(){
pointer head;
head=new node;
head->next=NULL;
return head;
}
pointer get(lklist head,int i){
int j;
pointer p;
if(i==0) return head;
if(i<0) return NULL;
j=0;
p=head->next;
while(p!=NULL){
j++;
if(j==i) break;
p=p->next;
}
return p;
}
int insert(lklist head,datatype x,int i){
pointer q,s;
q=get(head,i-1);
if(q==NULL) {
cout<<"非法插入位置!\n";
return 0;}
s=new node;
s->data=x;
s->next=q->next;
q->next=s;
return i;
}
int deletee(lklist head,int i) {
pointer p,q;
q=get(head,i-1);
if(q==NULL||q->next==NULL) {
cout<<"非法删除位置!\n";
return 0;}
p=q->next;
q->next=p->next;
delete p;
return 1;
}
int length(lklist head) {
int j;
pointer p;
j=0;
p=head->next;
while(p!=NULL) {
j++;
p=p->next;
}
return j;
}
void destroy(lklist head) {
pointer p,q;
p=head;
while(p!=NULL) {
q=p->next;
delete p;
p=q;
}
}
主函数要怎么写才能实现:1、按序号查找,给定1个值,查找该值是否在链表中,返回对应值节点的指针。2、插入运算:实现插入1节点的动作。3、调用插入运算实现建立一条具有10个元素值的单链表。4、删除运算:实现删除1节点动作。5、求表长:根据头结点遍历整条链表节点获得元素个数。6、销毁链表,释放所有节点空间。
[解决办法]
- C/C++ code
int main(){ lklist l = initlist(); for (int i = 0, j = 10; i < 10, j < 20; i++, j++) { insert(l, j, i); } get(l, 13); deletee(l, 0); cout << length(l) << endl; destroy(l);}