单链表反转
2015-08-30 10:22
417 查看
单链表的翻转是一道很基本的算法题。
方法1:将单链表储存为数组,然后按照数组的索引逆序进行反转。
方法2:使用三个指针遍历单链表,逐个链接点进行反转。
方法3:从第2个节点到第N个节点,依次逐节点插入到第1个节点(head节点)之后,最后将第一个节点挪到新表的表尾。
方法1的问题是浪费空间。方法2和方法3效率相当。一般方法2较为常用。
方法2代码:
[cpp] view
plaincopy
Node * ReverseList(Node *head)
{
Node *p1,*p2,*p3;
if(head==NULL||*head==NULL)
return head;
p1=head;
p2=p1->next;
while(p2) //注意条件
{
p3=p2->next; //要改变p2->next的指针,所以必须先保留p2->next
p2->next=p1;
p1=p2; //循环往后
p2=p3;
}
head->next=NULL; //原先的head已经变成tail,别忘了置空,只有到这步才能置空
*head=p1;
return head;
}
方法3代码:
[cpp] view
plaincopy
Node* ReverseList(Node* head)
{
Node *p,*q;
p=head->next;
while(p->next!=NULL) //在这个循环过程中p所指的元素一直是不变的
{
q=p->next;
p->next=q->next;
q->next=head->next;
head->next=q;
}
p->next=head; //相当于成环
head=p->next->next; //新head变为原head的next
p->next->next=NULL; //断掉环
return head;
}
方法1:将单链表储存为数组,然后按照数组的索引逆序进行反转。
方法2:使用三个指针遍历单链表,逐个链接点进行反转。
方法3:从第2个节点到第N个节点,依次逐节点插入到第1个节点(head节点)之后,最后将第一个节点挪到新表的表尾。
方法1的问题是浪费空间。方法2和方法3效率相当。一般方法2较为常用。
方法2代码:
[cpp] view
plaincopy
Node * ReverseList(Node *head)
{
Node *p1,*p2,*p3;
if(head==NULL||*head==NULL)
return head;
p1=head;
p2=p1->next;
while(p2) //注意条件
{
p3=p2->next; //要改变p2->next的指针,所以必须先保留p2->next
p2->next=p1;
p1=p2; //循环往后
p2=p3;
}
head->next=NULL; //原先的head已经变成tail,别忘了置空,只有到这步才能置空
*head=p1;
return head;
}
方法3代码:
[cpp] view
plaincopy
Node* ReverseList(Node* head)
{
Node *p,*q;
p=head->next;
while(p->next!=NULL) //在这个循环过程中p所指的元素一直是不变的
{
q=p->next;
p->next=q->next;
q->next=head->next;
head->next=q;
}
p->next=head; //相当于成环
head=p->next->next; //新head变为原head的next
p->next->next=NULL; //断掉环
return head;
}
相关文章推荐
- Cookie/Session的机制与安全
- AngularJS 表单(ng-form)验证
- 二分图学习小结
- 1111 -- 阶乘之和
- 1110 -- 3n+1中文版(简化版)
- zzuli OJ 1079: a+b(多实例测试2)
- JavaScript 设计模式之----单体(单例)模式
- 【笔试】33、链表中倒数第k个结点
- IE8下jQuery改变png图片透明度时出现的黑边问题
- poj 1159 Palindrome 最长公共子序列 滚动数组
- Postfix邮件服务器的原理和postfix + dovecot配置,使用Thunderbird发送邮件和SMTP认证
- 1109 -- aabb
- 1108 -- 最简单的循环
- 史上最简单的Hibernate入门简介
- zzuli OJ 1078: a+b(多实例测试1)
- Listener
- 【笔试】32、调整数组顺序使奇数位于偶数之前
- hadoop2.x编译(一)
- 0到100奇数之和
- 1107 -- 闰年