摘要: 对于这个问题还有一个很好的方法: 1、将两个链表逆序,这样就可以依次得到从低到高位的数字 2、同步遍历两个逆序后链表,相加生成新链表,同时关注进位 3、当两个链表都遍历完成后,关注进位。 4、 将两个逆序的链表再逆序一遍,调整回去 返回结果链表 阅读全文
posted @ 2017-09-10 16:50 toov5 阅读(3842) 评论(0) 推荐(0) 编辑
摘要: 假设链表中每一个节点的值都在0~9之间,那么链表整体就可以代表一个整数 给定两个链表的头节点head1和head2,请生成代表两个整数相加值的结果链表 传统做法 先把链表生成 整数 然后相加 这样的有个溢出问题 介绍一种做法: 利用栈结构求解: 1、 将两个链表分别从左到右遍历,遍历过程中将值压栈, 阅读全文
posted @ 2017-09-10 15:59 toov5 阅读(526) 评论(0) 推荐(0) 编辑
摘要: 一种特殊的链表节点类描述如下: public class Node{ public int value; public Node next; public Node rand; public Node(int data){ this.value = data } } rand指针是Node类中的新增 阅读全文
posted @ 2017-09-10 13:56 toov5 阅读(699) 评论(0) 推荐(0) 编辑
摘要: 给定一个单向链表的头节点head,节点的值是整型,再给定一个整数pivot。实现一个调整函数,左部分<pivot 中间=pivot 右边>pivot,除这个要求外,其他顺序不可改变 阅读全文
posted @ 2017-09-10 11:26 toov5 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 给定一个链表的头节点head,判断是否是回文结构 1->2->1 返回true 进阶: 如果链表长度N,时间复杂度O(N) 额外空间O(1) 方法一 利用栈结构(需要额外空间) 从左到右遍历,一次压栈。 这样的到的 从栈顶到栈底的节点值出现顺序会与原链表从左到右的值出现顺序相反。 废话不多说,上代码 阅读全文
posted @ 2017-09-10 10:51 toov5 阅读(264) 评论(0) 推荐(0) 编辑
摘要: 著名的约瑟夫杀人问题 哈哈哈哈 解读: 输入:一个环型单向链表的头节点head和报数m 返回: 最后生存下来的节点,并且这个节点自己组成环形单向链表,其他的节点都删掉 进阶问题: 如果链表节点数为N,想在时间复杂度为O(N)时完成原问题的要求,咋办? 普通解法: 如果链表为空或者节点数为1 或者m< 阅读全文
posted @ 2017-09-09 22:22 toov5 阅读(362) 评论(0) 推荐(0) 编辑
摘要: 给定单链表的表头节点head, 以及两个整数from 和 to, 在单向链表上把fro个节点到第to个节点这一部分进行反转 思路: 本题 有可能存在换头的问题,所以函数应该返回调整后的新的头节点 1 判断是否满足 1<=from<=to<=N 如果不满足,直接返回原来的头节点 2 找到第from-1 阅读全文
posted @ 2017-09-09 21:39 toov5 阅读(278) 评论(0) 推荐(0) 编辑
摘要: 分别实现反转单向和双向链表的函数 看代码: 可以用栈实现: 反向双向链表 调节指针的算法: 阅读全文
posted @ 2017-09-09 20:26 toov5 阅读(232) 评论(0) 推荐(0) 编辑
摘要: 给定链表的表头节点head,实现删除链表的中间节点的函数 推展: 给定链表的头节点,整数a 和 整数 b,实现删除a/b处节点的函数 先来分析原问题, 长度1 直接返回 长度2 将头节点删除 长度3 删除第二个 长度4 删除第二个 长度5 删除第三个。。。。。。长度每增加2 删除的节点就向后移动一个 阅读全文
posted @ 2017-09-09 19:24 toov5 阅读(326) 评论(0) 推荐(0) 编辑
摘要: 分别实现两个函数,一个可以删除单链表中倒数第k个节点,另一个可以删除双链表中倒数第k个节点 思路: 如果链表为空,或者k<1 参数无效 除此之外 让链表从头开始走到尾,每移动一步,就让k的值减1 当链表走到头时候 如果k值大于0 说明不用调整 因为链表根本没有倒数第k个节点 此时将原链表直接返回即可 阅读全文
posted @ 2017-09-09 17:05 toov5 阅读(917) 评论(0) 推荐(0) 编辑