编写代码把链表转置java_写一个递归版本的链表转置程序

[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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值