[cpp]
#include
using namespace
std;
typedef struct Node
{
Node(int v, Node
*ptr=NULL) : data(v), next(ptr) {}
int data;
Node *next;
}sNode;
//LB_c:
输出链表,head为链表头指针
void outputList(sNode
*head)
{
sNode *p = head;
while (p != NULL)
{
cout 《 p->data 《 "
-> ";
p = p->next;
}
cout 《 "NULL" 《
endl;
}
//LB_c: 转置链表的递归方法实现
sNode*
reverseList(sNode *head)
{
//LB_c:
异常判断(NULL==head)结束条件(NULL==head->nex),
//
即head为最后一个节点时,将该节点返回,即为转置链表的头节点。
if ( (NULL == head) ||
(NULL == head->next) )
return head;
//LB_c:
递归后续链表(即以head->next为首节点的链表)
sNode *pNewHead =
reverseList(head->next);
//LB_c:
上一步执行完后,head->next为后续链表的末尾节点,
//所以让head->next的next指向当前节点head
head->next->next
= head;
//LB_c:
当前节点的next指向NULL
head->next =
NULL;
//LB_c: 返回后续链表的头指针
return pNewHead;
}
int main()
{
//LB_c: 创建链表
sNode n5(5);
sNode n4(4,
&n5);
sNode n3(3,
&n4);
sNode n2(2,
&n3);
sNode n1(1,
&n2);
//LB_c: 输出原始链表
outputList(&n1);
//LB_c: 调用转置函数
sNode *pNew =
reverseList(&n1);
//LB_c: 输出转置后的链表
outputList(pNew);
return 0;
}
#include
using namespace
std;
typedef struct Node
{
Node(int v, Node
*ptr=NULL) : data(v), next(ptr) {}
int data;
Node *next;
}sNode;
//LB_c:
输出链表,head为链表头指针
void outputList(sNode
*head)
{
sNode *p = head;
while (p != NULL)
{
cout 《 p->data 《 "
-> ";
p = p->next;
}
cout 《 "NULL" 《
endl;
}
//LB_c: 转置链表的递归方法实现
sNode*
reverseList(sNode *head)
{
//LB_c:
异常判断(NULL==head)结束条件(NULL==head->nex),
//
即head为最后一个节点时,将该节点返回,即为转置链表的头节点。
if ( (NULL == head) ||
(NULL == head->next) )
return head;
//LB_c:
递归后续链表(即以head->next为首节点的链表)
sNode *pNewHead =
reverseList(head->next);
//LB_c:
上一步执行完后,head->next为后续链表的末尾节点,
//所以让head->next的next指向当前节点head
head->next->next
= head;
//LB_c:
当前节点的next指向NULL
head->next =
NULL;
//LB_c: 返回后续链表的头指针
return pNewHead;
}
int main()
{
//LB_c: 创建链表
sNode n5(5);
sNode n4(4,
&n5);
sNode n3(3,
&n4);
sNode n2(2,
&n3);
sNode n1(1,
&n2);
//LB_c: 输出原始链表
outputList(&n1);
//LB_c: 调用转置函数
sNode *pNew =
reverseList(&n1);
//LB_c: 输出转置后的链表
outputList(pNew);
return 0;
}