???这样单链表反转如何、
gl615 2008-05-22 10:56:54 如果嫌下面的话啰嗦就直接看看程序吧,反转有问题。。
----------------------------------------------------------------------------------------------------
我通过自己写的一个push()方法来创建单链表,链表只有一个头结点head,push()大致是这样的:如果按顺序push()-->0,1,2,3,4,5,6,7,8,9的话,那么创建出来的单链表就是头结点指向9的,链表即:9,8,7,6,5,4,3,2,1,0.是一个逆向的。
现在我又弄了个方法Reversal(),这时链表已经创建完成,想通过它来实现反转。大致描述:用一个临时变量temp来代表head,把它从链表头依次指向链表尾。当它指向头的时候,我就push()入temp的数值(这时是9),这时链表就是9,9,8,7..
然后我又弄个临时变量t来代替temp,把temp指向他自己的下一个,再就直接删除t,想达到删除链表原始的那个9的目的,这时链表就是:9,8,7,6... 现在temp指向的是8,然后有push()一个8进来,再把原始的8删除... 这样循环最终的目的就是链表为:0,1,2,3,4,5,6,7,8,9. head指向0.
这样我想就好像达到了把单链表反转的目的了,但就是删除的时候有错误,不知道如何是好。
请各位指点!!
==============================================================================================
#include <iostream.h>
template<typename T>
class MyList
{
public:
struct Node
{
T value;
Node* next;
};
MyList()
{
head=NULL;
}
void push(T e1) -----------//从链表头插入e1
{
Node* temp=new Node;
temp->value=e1;
temp->next=head;
head=temp;
}
void Reversal() -----------------//反转??
{
Node* temp=head;
for(;temp!=NULL;)
{
Node* t=temp;
push(temp->value);
temp=temp->next;
//delete t;
}
}
void Traversal() -----------------//遍历链表
{
Node* temp=head;
for(;temp!=NULL;temp=temp->next)
{
cout<<temp->value<<ends;
}
cout<<endl;
}
protected:
Node* head;
};
void main()
{
MyList<int> mylist1;
for(int i=0;i<10;i++)
{
mylist1.push(i);
}
mylist1.Reversal();
cout<<"mylist1:"<<endl;
mylist1.Traversal();
}
==================================================================================