好好学习数据结构之链表反转
2013-11-14 09:50
471 查看
如何把一个单链表进行反转,这个问题我已经被问过两次,一次是百度面试,另一次是中科院计算所。
方法1:将单链表储存为数组,然后按照数组的索引逆序进行反转。
方法2:使用三个指针遍历单链表,逐个链接点进行反转。
方法3:从第2个节点到第N个节点,依次逐节点插入到第1个节点(head节点)之后,最后将第一个节点挪到新表的表尾。
方法1浪费空间,不建议。
方法2代码如下:
ActList* ReverseList2(ActList* head)
{
if(NULL==head|| NULL==head->next)
return head;
ActList* p;
ActList* q;
ActList* r;
p = head;
q = head->next;
head->next = NULL;
while(q)
{
r = q->next; //
q->next = p;
p = q; //
q = r; //
[b]
}
[/b]
head=p;
return head;
}
[b]
[/b]方法3:
view
plainActList* ReverseList3(ActList* head)
{
ActList* p;
ActList* q;
p=head->next;
while(p->next!=NULL){
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-链表反转(递归与非递归)
- python数据结构学习笔记-2016-11-07-01-双链表
- 【学习笔记10】基本数据结构(栈 队列 链表 有根树)
- 数据结构学习(二)——单链表的操作之头插法和尾插法创建链表
- 数据结构学习笔记7--c语言建立一个链表(已测正确无误)
- 数据结构学习之链表的Java实现
- 数据结构学习心得——双链表和循环链表
- 2018.01.08大数据面试题-算法大全-数据结构-算法1-单链表反转
- 数据结构学习笔记——顺序表和链表的比较
- C语言数据结构 link 链表反转的实现
- 数据结构学习——链表的基本概念和分类
- 小楼一阁的数据结构学习笔记(三、单链表)
- 数据结构学习之双向链表结构
- c#数据结构学习——单链表
- 郁闷,今天学习数据结构的链表,结果被模板给郁闷住了,动手能力还是要加强
- 数据结构学习---线性表的链表存储
- 数据结构学习---堆栈的动态数组实现及链表实现
- 【Java数据结构】Java数据结构之链表反转
- 数据结构学习- 链表
- 数据结构-双向链表(学习笔记)