/**/
/*************************************************************
* FileName: reverseLink.cpp
* Description: implemention for the reverse of a link
* Author: Cui Xiaofeng
* Date: 2008/03/22
***************************************************************/
#include < iostream >
using namespace std;
/**/ /* link node struct */
struct Node
... {
public:
Node():val(0), next(NULL)
...{
}
Node(int _val, Node* _next):val(_val), next(_next)
...{
}
friend class Link;
private:
int val;
Node *next;
} ;
/**/ /* link definition */
class Link
... {
public:
Link(Node *_head = NULL):head(_head)
...{
}
~Link()
...{
Node *p = head, *q = head;
while (p != NULL)
...{
q = p->next;
delete p;
p = q;
}
}
Node* CreateLink();
Node* ReverseLink();
void PrintLink();
private:
Node *head;
} ;
void Link::PrintLink()
... {
for (Node *n = head; n != NULL; n = n->next)
...{
cout << n->val << endl;
}
}
Node * Link::CreateLink()
... {
int a[] = ...{0, 2, 3, 6, 7, 9};
for (int i = 0; i < sizeof(a)/sizeof(int); i++)
...{
Node *node = new Node(a[i], head);
head = node;
}
return head;
}
Node * Link::ReverseLink()
... {
Node *p, *lp, *rp;
lp = head;
p = lp->next;
lp->next = NULL;
while (p != NULL)
...{
rp = p->next;
p->next = lp;
lp = p;
p = rp;
}
head = lp;
/**//* the following is better, copied from others */
/**//*
p = head;
lp = NULL;
rp = NULL;
while (p != NULL)
{
rp = p->next;
p->next = lp;
lp = p;
p = rp;
}
head = lp;
*/
return head;
}
int main()
... {
Link l;
l.CreateLink();
l.PrintLink();
cout << "反转后:" << endl;
l.ReverseLink();
l.PrintLink();
return 0;
}
* FileName: reverseLink.cpp
* Description: implemention for the reverse of a link
* Author: Cui Xiaofeng
* Date: 2008/03/22
***************************************************************/
#include < iostream >
using namespace std;
/**/ /* link node struct */
struct Node
... {
public:
Node():val(0), next(NULL)
...{
}
Node(int _val, Node* _next):val(_val), next(_next)
...{
}
friend class Link;
private:
int val;
Node *next;
} ;
/**/ /* link definition */
class Link
... {
public:
Link(Node *_head = NULL):head(_head)
...{
}
~Link()
...{
Node *p = head, *q = head;
while (p != NULL)
...{
q = p->next;
delete p;
p = q;
}
}
Node* CreateLink();
Node* ReverseLink();
void PrintLink();
private:
Node *head;
} ;
void Link::PrintLink()
... {
for (Node *n = head; n != NULL; n = n->next)
...{
cout << n->val << endl;
}
}
Node * Link::CreateLink()
... {
int a[] = ...{0, 2, 3, 6, 7, 9};
for (int i = 0; i < sizeof(a)/sizeof(int); i++)
...{
Node *node = new Node(a[i], head);
head = node;
}
return head;
}
Node * Link::ReverseLink()
... {
Node *p, *lp, *rp;
lp = head;
p = lp->next;
lp->next = NULL;
while (p != NULL)
...{
rp = p->next;
p->next = lp;
lp = p;
p = rp;
}
head = lp;
/**//* the following is better, copied from others */
/**//*
p = head;
lp = NULL;
rp = NULL;
while (p != NULL)
{
rp = p->next;
p->next = lp;
lp = p;
p = rp;
}
head = lp;
*/
return head;
}
int main()
... {
Link l;
l.CreateLink();
l.PrintLink();
cout << "反转后:" << endl;
l.ReverseLink();
l.PrintLink();
return 0;
}