数据结构
Tao的博客
程序猿
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
常见链表操作-单链表反转(JAVA实现)
在技术面试的环,单链表的操作经常会被问到,比如一些常见的问题: 单链表反转 链表中环的检测 两个有序俩表的合并 删除链表倒数第n个节点 求链表的中间节点 接下来的文章,我对这些操作的实现算法做了一些总结,具体实现的编程语言是Java。 今天第一篇,先讲讲如何实现单链表反转。 实现思路 第一步,从头结点开始遍历链表,找到尾结点。 第二步,从尾结点开始,反向修改每个节点的next引用,直到头结点。...原创 2018-10-07 22:21:07 · 539 阅读 · 0 评论 -
常见链表操作-链表中环的检测(JAVA实现)
问题 如何检测一个单链表中是否有环,例如下图的例子。 解决思路1:快慢指针法 这是最常见的方法。思路就是有两个指针P1和P2,同时从头结点开始往下遍历链表中的所有节点。 P1是慢指针,一次遍历一个节点。 P2是快指针,一次遍历两个节点。 如果链表中没有环,P2和P1会先后遍历完所有的节点。 如果链表中有环,P2和P1则会先后进入环中,一直循环,并一定会在在某一次遍历中相遇。 因此,只要发现P2和...原创 2018-10-14 17:10:16 · 6888 阅读 · 4 评论 -
常见链表操作-两个有序表的合并(JAVA实现)
问题 将两个有序单链表A和B,合并成C,如下图。 解决思路 同时从两个链表的头节点开始遍历,比较当前节点大小,将小的节点添加到C链表中,然后遍历。 非递归写法 /** * 链表ADT * * @author wangtao * @param <T> */ public class LinkADT<T> { /** * 单链表节点 ...原创 2018-10-20 21:22:38 · 1488 阅读 · 0 评论 -
常见链表操作-删除链表倒数第n个节点(JAVA实现)
问题 给出一个单向链表,删除该链表倒数第n个节点,并返回头节点。 例如: 给出链表 1->2->3->4->5,n=2 返回链表 1->2->3->5 解题思路 最容易想到的算法: 先遍历一次链表,记下链表的长度,然后计算倒数第n个节点的下标m,然后再遍历一次链表,移除第m个节点。 这种算法的时间复杂度是O(n^2 )。 有没有时间复杂度原创 2018-10-20 21:24:38 · 1143 阅读 · 0 评论 -
常见链表操作-求链表的中间节点(JAVA实现)
问题 给出任意单向链表,找出并返回该链表的中间节点。 奇数长度的链表,例如:1->2->3->4->5 返回节点 3 偶长度的链表,例如:1->2->3->4->5->6 返回节点 4 解题思路 与链表中环的检测一样,这题同样可以使用快慢指针来解决。 定义两个指针fast和slow。slow一次遍历一个节点,fast一次遍历两个节点,由于fas...原创 2018-10-20 21:25:27 · 3593 阅读 · 1 评论
分享