c++实现单链表“就地逆序” 哪里出错了呢??
template<class T>
class LinkNode
{
public:
T data;
LinkNode<T> *link;
};
//*************************
template<class T>
class List
{
public:
List(){first=new LinkNode<T>;first->link=NULL;size=0;}//附加结点的单链表
void reverse();//元素逆序
protected:
LinkNode<T> *first;
};
实现基本线性表的就地逆置void reverse()方法,也就是将基本线性表中的数据元素交换位置排列,新的序列与原来的顺序正好相反,比如原来序列“abcdef”,倒置后变为“fedcba”。
[提示]:把一个单链表断开为两个单链表,其中一个由first指针指向,只包含一个头结点成为一个空表,另一个单链表由p指针指向,成为一个不带头结点单链表,接下来从p单链表中取出第一个元素插入first链表的头部,直到p指向空为止。
我绝得没有什么地方错了,就是程序运行时会卡在一个地方,但编译能通过,真不知道为什么
template<class T>
void List<T>::reverse()
{
LinkNode<T> *p;
p=first->link;
first->link=NULL;
while(p!=NULL)
{
p->link=first->link;
first->link=p;
p=p->link;
}
}
麻烦大神么给小的指点指点 单链表 c++ 线性表 链表 数据
[解决办法]
struct link
{
charval;
link*next;
link(char v)
: val(v), next(NULL)
{}
};
link* reverse(link* head)
{
link* cur = head;
link* prev = NULL;
link* next = NULL;
while(cur)
{
next = cur->next;
cur->next = prev;
prev = cur;
cur = next;
}
return prev;//新表头
}
LinkNode<T> *p;
p=first->link;
first->link=NULL;//这里已经是NULL了
while(p!=NULL)
{
p->link=first->link;//把P的下一个置NULL
first->link=p;
p=p->link; //p还取P的下一个?已经是NULL了
}
[解决办法]
F5 F7 F11 必须学会打断点,跟踪,调试。