链表
程序猿渣渣帅
技术、生活、观点、个人成长。 主要关注互联网电商广告业务、数据分析方法论、大数据分析平台建设;java web、分布式、大数据处理以及可视化等相关技术。
展开
-
链表---一个所有元素以升序排序的单链表,将它转换成一棵高度平衡的二分查找树
样例 21->2->3 => / \ 1 3public TreeNode sortedListToBST(ListNode head) { // write your code here if (head == null) { return null; ...原创 2018-08-04 23:56:46 · 847 阅读 · 0 评论 -
链表---给定一个排序链表,删除所有重复的元素每个元素只留下一个
样例给出 1->1->2->null,返回 1->2->null给出 1->1->2->3->3->null,返回 1->2->3->nullpublic static ListNode deleteDuplicates(ListNode head) { // write your code...原创 2018-08-02 23:24:54 · 1581 阅读 · 0 评论 -
链表---删除链表中等于给定值val的所有节点
样例给出链表 1->2->3->3->4->5->3, 和 val = 3, 你需要返回删除3之后的链表:1->2->4->5。public ListNode removeElements(ListNode head, int val) { // Write your code here ListNod...原创 2018-08-02 23:22:03 · 1489 阅读 · 0 评论 -
链表---合并n个有序链表
public ListNode mergeKLists(List<ListNode> lists) { // write your code here if (lists == null || lists.size() == 0) { return null; } ListNode dummy =...原创 2018-08-02 23:20:40 · 2065 阅读 · 0 评论 -
链表---每次翻转K个
注意点:需要保存翻转的开始以及结束节点两个一组进行操作public ListNode swapPairs(ListNode head) { // write your code here if (head == null || head.next == null) { return head; } Li...原创 2018-08-02 23:19:47 · 288 阅读 · 0 评论 -
链表---判断一个链表是否有环以及找到环开始的节点
如果队列中含有圆环,那么对队列的遍历会有什么影响呢。试想有一个圆形跑道,甲乙两人同时在跑道的起点,如果甲的速度是乙的两倍,那么当乙跑完半圈时,甲跑完一圈回到起点,乙跑完一圈回到起点时,甲跑完两圈也回到起点,这样的话,甲乙重新在起点相遇。采用上面的思路,如果我们使用两个指针分别从队列的起点出发,一个指针前进一次遍历1个节点,另一个指针前进一次,遍历2个节点,如果队列中有环,那么我们可以确信,前进...原创 2018-08-02 23:16:47 · 493 阅读 · 1 评论 -
链表---找中间节点
要是链表节点个数为奇数时刚好指向中间点;为偶数时指向中间两个的第一个元素private static ListNode findMiddle(ListNode head) { ListNode slow = head, fast = head.next; while (fast != null && fast.next !=...原创 2018-08-02 23:12:59 · 1230 阅读 · 0 评论 -
链表---翻转
一、非递归实现//非递归private static ListNode reverse(ListNode head) { ListNode newHead = null; while (head != null) { ListNode temp = head.next; ...原创 2018-08-02 23:11:04 · 102 阅读 · 0 评论 -
链表----插入、归并、快速排序
1、插入排序思路:外循环保证元素的逐个插入,不用考虑是否断裂,内循环根据找个要插入元素的前一个节点,然后把待插入的节点放进去,修改两个指针即可。//1 插入排序N*N public static ListNode sortList1(ListNode head) { if (head == null) return head; ListNode h...原创 2018-08-01 23:39:31 · 137 阅读 · 0 评论 -
链表---使用链表实现栈和队列
在Java中,链表的实现非常简单,每个节点Node都有一个值val和指向下个节点的链接next。节点的定义:class Node { int val; Node next; Node(int x) { val = x; next = null; }}栈的实现:class Stack{ Node top;...原创 2018-08-01 23:34:15 · 1613 阅读 · 0 评论 -
链表---判断一个链表是否为回文链表
思路1:找到中间节点然后把后面的翻转,(需要断开链表)然后比较和头节点开始的前段,最后要是后半段的游标可以走到最后说明是回文否则不是思路2:整体翻转比较思路3:借助一个栈存放前半段的元素,然后和后半段的比较public boolean isPalindrome(ListNode head) { if (head == null || head.next == null...原创 2018-08-01 23:29:34 · 1498 阅读 · 0 评论 -
链表---两个链表相加求和
1、你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。给出两个链表 3->1->5->null 和 5->9->2->null,返回 8->0->8->nullpublic ListNode addLists(ListNo...原创 2018-08-01 23:27:08 · 15679 阅读 · 1 评论 -
链表--- 给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前,并保留两部分内链表节点原有的相对顺序
思路:一拆为二然后合并public ListNode partition(ListNode head, int x) { ListNode dummy1 = new ListNode(-1); ListNode dummy2 = new ListNode(-1); ListNode p1 = dummy1; ListNode p...原创 2018-08-01 23:24:22 · 4316 阅读 · 0 评论 -
链表---在O(1)时间复杂度删除链表节点
思路:把后继结点的值复制到该节点,然后让该节点的next指向其后继结点的next即可public void deleteNode(ListNode node) { // write your code here node.val = node.next.val; node.next = node.next.next; }...原创 2018-08-01 23:04:24 · 459 阅读 · 0 评论 -
链表---找出单链表中倒数第k个节点
思路:1、迭代,二指针,快的先走n步,然后一起走,当fast走到最后,slow就是结果2、递归,到达链表末尾返回一个0计数器,当计数器等于k时就是第k个迭代ListNode nthToLast(ListNode head, int n) { ListNode fast = head; ListNode slow = head; whi...原创 2018-08-01 23:02:42 · 2579 阅读 · 0 评论 -
链表---找到两个单链表最开始的交叉节点
注意事项- 如果两个链表没有交叉,返回null。- 在返回结果后,两个链表仍须保持原有的结构。- 可假定整个链表结构中没有循环。样例下列两个链表:A: a1 → a2 ↘ c1 → c2 → c3 ↗ B: b1 → ...原创 2018-08-04 23:59:51 · 349 阅读 · 0 评论 -
链表---给定一个链表,删除链表中倒数第n个节点,返回链表的头节点
链表中的节点个数大于等于n给出链表1->2->3->4->5->null和 n = 2.删除倒数第二个节点之后,这个链表将变成1->2->3->5->null ListNode removeNthFromEnd(ListNode head, int n) { // write your code here ...原创 2018-08-03 16:49:15 · 3338 阅读 · 3 评论