2009-03-01 回答
#include
#include
struct date//申明结构体
{
char str;
date *next;//用来指向下一个结构体指针
};
int main()
{
date *ps,*pe,*head = null;//定义三个结构体指针,head用来保存链头,pe保存链尾
date *rhead = null;//定义读取结构体指针
pe = head;//刚开始没有任何结点,指向表头
char temp;
do
{
scanf("%c",&temp);
if (temp != '#')
{
ps = new date;//新建结点
ps->str = temp;//给新结点赋值数据
ps->next = null;//让指向下一个为空(新结点,也就是新链尾)
if (head==null)//如果链表还没有任何结点存在
{
head = ps;//就把新结点地址给head
}
else
pe->next = ps;//把新结点连接到链尾
/*
第一次不执行,而到第二次pe就是上一次的ps
而pe->next让其指向下一次的ps
*/
pe = ps;//新结点成为了新的链尾
}
} while (temp != '#');
printf("\n刚才输入的是:\n");
rhead = head;//取得链头
/*
当然也可以直接用head不过这样就会改变其值,而无法再次查找链表
切忌链头的重要性,只要找不到链头,整条链表就没用!
*/
while (rhead != null)//循环到链尾
{
printf("%c",rhead->str);
if (rhead!=null)
{
rhead = rhead->next;//让其指向下一个链表
}
}
while (head!=null)//清除链表
{
date *p;
p = head;//把要删除的链给临时变量
head= head->next;//先连
delete p;//后断
/*
不管是插入,删除还是清除链表都要遵循"先连后断"
*/
}
printf("\n");
getch();
return 0;
}
//这个是我以前写的一个链表的例子,给你个参考吧...只需改一小点就行了