反转单链表
2016-07-08 09:25
274 查看
实现单链表的反转:
1)栈实现:链表压入栈中,依次弹出,顺序反转。时间复杂度O(n),空间复杂度O(n);
2)借用三个指针:三个指针,前两个用来反转节点指向,第三个记录后一个节点,遍历整个链表,时间复杂度O(n),空间复杂度O(1)
//返回一个实现了反转的链头
public static LinkNode reverseLink(LinkNode pNode){
//定义三个指针,第一个和第二个指针用来交换指向(即反转),
//第三个指针记录下一个指针
LinkNode first=pNode;
LinkNode secend=pNode.nextNode;
LinkNode third=null;
while(secend!=null){
third=secend.nextNode;
secend.nextNode=first;
first=secend;
secend=third;
}
pNode.nextNode=null;
return first;
}
1)栈实现:链表压入栈中,依次弹出,顺序反转。时间复杂度O(n),空间复杂度O(n);
2)借用三个指针:三个指针,前两个用来反转节点指向,第三个记录后一个节点,遍历整个链表,时间复杂度O(n),空间复杂度O(1)
//返回一个实现了反转的链头
public static LinkNode reverseLink(LinkNode pNode){
//定义三个指针,第一个和第二个指针用来交换指向(即反转),
//第三个指针记录下一个指针
LinkNode first=pNode;
LinkNode secend=pNode.nextNode;
LinkNode third=null;
while(secend!=null){
third=secend.nextNode;
secend.nextNode=first;
first=secend;
secend=third;
}
pNode.nextNode=null;
return first;
}
相关文章推荐
- C#数据结构之顺序表(SeqList)实例详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- 数据结构之Treap详解
- 用C语言举例讲解数据结构中的算法复杂度结与顺序表
- C#数据结构之堆栈(Stack)实例详解
- C#数据结构之双向链表(DbLinkList)实例详解
- JavaScript数据结构和算法之图和图算法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例
- Java数据结构及算法实例:选择排序 Selection Sort
- Java数据结构及算法实例:朴素字符匹配 Brute Force
- Java数据结构及算法实例:汉诺塔问题 Hanoi
- Java数据结构及算法实例:快速计算二进制数中1的个数(Fast Bit Counting)