简单链表
在用链表的时候有一点要十分的注意,
这一点是相当的关键,简直是太重要了。
之所以能在这里来说这一点,这个还要
归功于我的数据结构老师“李学俊”了。
好了, 不废话了,直入话题。
这一点就是:
在用链表的时候,head指针不要存储任何
数据,也就是说head的数据域是不放入
数据的,那用来做什么呢?
这个问的好,它就在那空着,什么也不做。
可以说head是一个特殊的结点,也可以说
它不是结点,因为结点包括了
数据域和指针域,但是head严格来说只有
指针域,虽然有数据域,但是不起作用。
下面来看一个我的代码,其中包括了建表,
删表,和在末尾增加数据三个功能。
View Code
#include "iostream" #include "cstring" #include "string" #include "algorithm" #include "cstdio" using namespace std; struct Node { int Num; Node * Next; }; Node *Head; Node *tmp; Node *p; Node *tail; void Init(){ Head = (Node *)malloc(sizeof(Node)); Head->Next = NULL; Head->Num = 0; tail = (Node *)malloc(sizeof(Node));//这句话是多余的,因为在执行tail=Head时tail的地址=Head的地址; tail = Head; } void Build(int n) { tmp = (Node *)malloc(sizeof(Node)); tmp->Num = n; tmp->Next = NULL; tail->Next = tmp; tail = tail->Next; } void Delete(int n){ if(Head->Next==NULL) return; p = Head; while(p->Next->Num!=n && p->Next->Next!=NULL){ p = p->Next; } if(p->Next->Num==n){ if(p->Next->Next==NULL){ tail = p; } p->Next=p->Next->Next; cout<<"Successfully Delete!"<<endl; cout<<"After Deleting:"; } else{ cout<<"Not Found!"<<endl; cout<<"After Deleting:"; } } void Print(){ p = Head->Next; if(p==NULL){ cout<<"Empty!"<<endl; return; } while(p!=NULL){ cout<<p->Num<<" "; p = p->Next; } cout<<endl; } int main() { int a; Init(); while(cin>>a && a){ Build(a); } Print(); while(cin>>a && a){ Delete(a); Print(); } if(Head->Next==NULL){ Head = tail; } while(cin>>a && a){ Build(a); } cout<<"After Adding:"; Print(); }
posted on 2012-04-25 00:59 More study needed. 阅读(228) 评论(0) 编辑 收藏 举报