
数据结构
Tao的博客
程序猿
展开
-
常见链表操作-单链表反转(JAVA实现)
在技术面试的环,单链表的操作经常会被问到,比如一些常见的问题:单链表反转链表中环的检测两个有序俩表的合并删除链表倒数第n个节点求链表的中间节点接下来的文章,我对这些操作的实现算法做了一些总结,具体实现的编程语言是Java。今天第一篇,先讲讲如何实现单链表反转。实现思路第一步,从头结点开始遍历链表,找到尾结点。第二步,从尾结点开始,反向修改每个节点的next引用,直到头结点。...原创 2018-10-07 22:21:07 · 505 阅读 · 0 评论 -
常见链表操作-链表中环的检测(JAVA实现)
问题如何检测一个单链表中是否有环,例如下图的例子。解决思路1:快慢指针法这是最常见的方法。思路就是有两个指针P1和P2,同时从头结点开始往下遍历链表中的所有节点。P1是慢指针,一次遍历一个节点。P2是快指针,一次遍历两个节点。如果链表中没有环,P2和P1会先后遍历完所有的节点。如果链表中有环,P2和P1则会先后进入环中,一直循环,并一定会在在某一次遍历中相遇。因此,只要发现P2和...原创 2018-10-14 17:10:16 · 6823 阅读 · 4 评论 -
常见链表操作-两个有序表的合并(JAVA实现)
问题将两个有序单链表A和B,合并成C,如下图。解决思路同时从两个链表的头节点开始遍历,比较当前节点大小,将小的节点添加到C链表中,然后遍历。非递归写法/** * 链表ADT * * @author wangtao * @param <T> */public class LinkADT<T> { /** * 单链表节点 ...原创 2018-10-20 21:22:38 · 1434 阅读 · 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 · 1101 阅读 · 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 · 3549 阅读 · 1 评论