算法-java
aloserbird
一名热爱编程的后端程序员
展开
-
判断链表是否有环,并返回环的起始节点
问题判定链表是否有环,如果存在环,找到环的起始节点。思路用两个指针slow,fast,slow指针一次走一步,fast指针一次走两步。如果他们相遇则存在环。那如何找到环的起始节点那?当他们相遇时,让slow指针回到原来的起点。fast指针还在相遇的节点,然后两个指针一次走一步,当他们相遇时就是环的起始节点。证明: 第一次相遇时,slow指针走过的路程S1=非环部分长度+弧A的长度 fast指针走原创 2017-08-14 12:08:34 · 509 阅读 · 0 评论 -
BST树转换为有序双向循环链表
思路以中序遍历遍历一棵二叉树的时候,每遍历到一个结点,修改该结点的left指针指向前一个遍历到的结点,修改前一个遍历结点的right指针,指向当前结点。每次递归调用的时候,更新当前遍历结点的right指针让其指向头结点head,同时更新头结点head的left指针让其指向当前遍历结点。代码void treeToDoubleList(Node p,Node prev,Node head){原创 2017-09-03 19:01:54 · 1031 阅读 · 0 评论 -
Convert Sorted List to Binary Search Tree
问题给定一个升序排列的有序单链表,将其转换为一棵平衡的二叉搜索树。思路先找到链表中间节点作为根节点,然后递归左右两半部分。可以使用快慢指针找到中间节点。代码public class Solution { public TreeNode sortedListToBST(ListNode head) { if(head == null) return null; if转载 2017-09-03 20:00:31 · 190 阅读 · 0 评论 -
仅使用栈操作逆置栈
思路写一个递归函数,每次返回并移除栈底元素。再写一个递归函数,每次调用第一个递归函数取得栈底元素,再调用自身,再将本次取得的元素入栈。代码及测试(java)public static int getAndRemoveBottomEle(Stack<Integer> stack){ int result = stack.pop(); if(stack.isEmpt原创 2017-08-15 14:35:40 · 1246 阅读 · 0 评论 -
利用快速排序思想求数组第k大元素
求数组中第k打元素原创 2017-10-21 11:11:53 · 1001 阅读 · 0 评论 -
利用归并排序求数组中的逆序对
求数组中的逆序对的数目原创 2017-10-21 16:04:42 · 509 阅读 · 0 评论