单链表转置问题
原题:
已知一个单链表,要求不增加辅助变量,实现单链表转置,
也就是表尾变表头,表头变表尾。
大家对单链表转置问题,怎么处理的?
我只想出非递归算法,在VC下调试通过。
typedef int Data;
typedef struct Node
{
Data d;
Node *next;
}Node;
/********************************************************************
*Name:
* Node * revert_printf2(Node *h, Node *n);
*Node *h, h is the pointer of previous node
*Node *n, n is the pointer of next node pointed by h->next
*Description:
*
*Returns:
* The pointer of the head node after transpose
********************************************************************/
Node * revert_printf2(Node *h, Node *n)
{
Node *k, *p, *header;
h->next = NULL;
while (NULL !=h && NULL != n)
{
k = n->next;
n->next = h;
h = n;
n = k;
}
return h;
}
调用的时候,假设head指向头结点
ret = revert_printf2(head, head->next);
ret就是转置后的头结点
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
递归做法
type struct Node{
...................
} *node;
node reverse(node frist)
{
node head, p;
if(!first || !first->next)
return first;
p = first->next;
head = reverse(p)
p->next = first;
first->next = NULL;
return head;
}
小弟,最开始没看清题意写了个递归 ,可惜是2个参数的,
Node *reverse(Node *first, Node *bf)
{
Node *p, *q;
if(fist == NULL)
{
return fist;
}
if(fist->next == NULL)
{
fist ->next = bf;
return first;
}
p = first->next;
q = rerverse(first, first->next);
first->next = bf;
return q;
}
[ 本帖最后由 lasting007 于 2009-12-4 02:05 编辑 ]