不带头节点链表逆序的两种方法
2008-11-01 09:16
465 查看
公司笔试或面试常考这一点。
递归解法如下:
node* reverse(node * head)
{
if(head==NULL || head->next==NULL)
return head;
node* tail= head->next;
node* newHead= reverse(head->next);
tail->next=head;
head->next=NULL;
return newHead;
}
非递归三指针解法如下:
node* reverse(node * head)
{
if(head==NULL || head->next==NULL)
return head;
node *p1, *p2, *p3;
p1=head;
p2=head->next;
head->next=NULL;
while ((p3=p2->next) != NULL)
{
p2->next=p1;
p1=p2;
p2=p3;
}
p2->next=p1;
head=p2;
return head;
}
递归解法如下:
node* reverse(node * head)
{
if(head==NULL || head->next==NULL)
return head;
node* tail= head->next;
node* newHead= reverse(head->next);
tail->next=head;
head->next=NULL;
return newHead;
}
非递归三指针解法如下:
node* reverse(node * head)
{
if(head==NULL || head->next==NULL)
return head;
node *p1, *p2, *p3;
p1=head;
p2=head->next;
head->next=NULL;
while ((p3=p2->next) != NULL)
{
p2->next=p1;
p1=p2;
p2=p3;
}
p2->next=p1;
head=p2;
return head;
}
相关文章推荐
- 单链表反转/逆序的两种方法
- 两种方法实现:输入一个链表,从尾到头打印链表每个节点的值
- 两种方法求单链表逆序
- C 带头节点单链表逆序
- 两种方法实现链表的节点操作排序
- 笔试题三:带头节点head链表逆序
- 两种方法实现:输入一个链表,从尾到头打印链表每个节点的值
- 两种方法求单链表逆序
- 链表面试题--两种方法逆序打印单链表(栈和递归)
- 不带头节点的单向链表逆序
- C语言:链表的逆序,两种思考方法,第一种用rev_1()实现,第二种用rev_2( )实现.
- 单向链表逆转(带头结点)的两种方法
- 两种方法实现单向链表的创建、遍历、删除、查找、逆序输出(循环法和递归法)
- 6-2 单链表结点删除(20 分)_单链表的删除节点的两种方式——还是双指针和链表覆盖好用
- 用两种方法实现栈---顺序表和链表
- 带头节点链表之插入排序(C语言版)
- 带头节点链表实例(C语言实现)
- 单链表反转/逆序的两种方法
- 0(1)时间删除带头节点单链表指定节点。
- 一种简单的单链表逆序、反转的方法