6 蜗牛不爱海绵宝宝

尚未进行身份认证

我要认证

做一个有趣的人(大家可以关注我的GitHub:https://github.com/snail-wj/offer_demo,这个上面覆盖了剑指offer的所有解析以及参考URL,希望对大家面试有帮助)

等级
TA的排名 1w+

17.在单链表中删除指定值的节点

【题目】给定一个链表的头节点head和一个整数num,请实现函数将值为num的节点全部删除【代码1】时间复杂度O(n),空间复杂度O(n)class Solution { public ListNode deleteNode(ListNode head, int val) { ListNode cur = head; Stack<ListNode> stack = new Stack<>(); while(cur !=

2020-05-28 00:06:39

16.删除无序单链表中值重复出现的节点

【题目】给定一个无序单链表的头节点head,删除其中值重复出现的节点。【代码1】时间复杂度O(n),空间复杂度O(n在这里插入代码片)class Solution { public ListNode deleteDuplicates(ListNode head) { if(head == null || head.next == null){ return head; } ListNode pre = head;

2020-05-27 23:42:22

15.复制含有随机指针的链表

【题目】给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任意节点或空节点。要求返回这个链表的深拷贝【代码1】时间复制度O(n),空间复制度O(n)class Solution { public Node copyRandomList(Node head) { Node cur = head; Map<Node, Node> map = new HashMap<Node, Node>(); whil

2020-05-14 00:30:09

14.两个单链表相加

【题目】给定两个用链表表示的整数,每个节点包含一个数位。例如:链表1为9-> 3 -> 7,链表2为6 -> 3,最后生成的结果为1 -> 0 -> 0 -> 0。【代码1】时间复杂度O(n),空间复杂度O(n) public ListNode addTwoNumbers(ListNode l1, ListNode l2) { Stack<Integer> stack1 = new Stack<>();

2020-05-12 01:06:58

13.将单向链表按某值化分为左边小,中间相等,右边大的形式

【题目】给定一个单向链表的头节点head,节点的值类型是整形,在给定一个整数pivot。实现一个调整链表的函数,将链表调整为左部分都是值小于pivot的节点,中间部分都是值等于pivot的节点,右部分都是值大于pivot的节点。除这个要求外,对调整后的节点顺序没有更多的要求。【代码1】时间复杂度为O(n),空间复杂度为O(n) public Node listPartition(Node head, int pivot) { if (head == null) {

2020-05-09 02:23:28

12.生成窗口最大值数组

【题目】给定一个数组 nums 和滑动窗口的大小 k,请找出所有滑动窗口里的最大值。【代码】 public int[] maxSlidingWindow(int[] nums, int k) { if(nums == null || k < 1 || nums.length < k){ return new int[0]; ...

2020-05-07 00:07:54

11.用一个栈实现另一个栈的排序

【题目】一个栈中的元素的类型为整形,现在想将该栈从顶到底按从小到大的顺序排序,只许申请一个栈。除此之外,可以申请新的变量,但是不能申请额外的数据结构,如何完成排序。【代码】 private void sortStackByStack(Stack<Integer> stack) { Stack<Integer> helper = new Stack...

2020-05-05 19:14:57

10.如何仅用递归函数和栈操作逆序一个栈

题目 一个栈依次压入1,2,3,4,5,那么从栈顶到栈底分别为5,4,3,2,1。将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现了栈中元素的逆序,但是只能用递归函数来实现,不能用其他数据结构代码 private int getAndRemoveLastElement(Stack<Integer> stack) { int result = ...

2020-05-05 16:58:26

09.用两个栈实现队列

题目 用两个栈实现一个队列,队列的声明如下,请实现它的两个函数appendTail 和deleteHead,分别完成在队列尾部插入整数和在队列头部删除整数的功能。 (若队列中没有元素,deleteHead返回-1)。代码class CQueue { private Stack<Integer> stackPush = new Stack<Integer...

2020-05-05 15:58:42

08.设计一个有getMin功能的栈

1.题目 请设计一个栈,除了常规栈支持的pop与push函数以外, 还支持min函数,该函数返回栈元素中的最小值。执行push, pop,和min的时间复杂度必须为O(1)。2.代码class MinStack { private Stack<Integer> minStack = new Stack<Integer>(); privat...

2020-05-05 15:52:28

07.判断一个链表是否为回文结构

【题目】 给定一个链表的头节点head,前判断该链表是否为回文结构 例如: 1 -> 2 -> 1,返回true 1 -> 2 -> 2 -> 1,返回true 1 -> 2 -> 3,返回false【代码1,空间复杂度n】 public boolean isPalindrome(ListNode head) { Li...

2020-04-25 17:06:03

06.环形单链表的约瑟夫问题

【问题】 输入:一个环形单向链表的头节点head和报数的值m 返回 :最后生存下来的节点,且这个节点自己组成环形单链表,其他节点都删掉。【代码】 public ListNode josephusKill(ListNode head, int m) { if (head == null || head.next == head || m < 1) { ...

2020-04-24 01:05:50

05.反转部分单向链表

[题目]反转从位置 m 到 n 的链表。请使用一趟扫描完成反转,说明1 ≤ m ≤ n ≤ 链表长度。输入: 1->2->3->4->5->NULL, m = 2, n = 4输出: 1->4->3->2->5->NULL【代码】public ListNode reverseBetween(ListNode head, int...

2020-04-23 00:33:00

04.反转单向链表和双向链表

【题目】实现反转单向链表的函数【代码】 public ListNode reverseList(ListNode head) { ListNode pre = null; ListNode next = null; while(head != null){ next = head.next; ...

2020-04-22 01:11:29

03.删除链表的中间节点

【题目】 给定一个链表的头节点head,实现删除链表的中间节点的函数【代码】 private ListNode removeMidNode(ListNode node) { if (node == null || node.next == null) { return node; } ListNode pre =...

2020-04-22 00:16:39

02.在单链表和双链表中删除倒数第K个节点

【题目】 分别实现两个函数,一个可以删除单链表中倒数第k个节点,另一个可以删除双链表中倒数第k个节点【代码】/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; }...

2020-04-20 23:36:58

01.打印两个链表的公共部分

【题目】给定两个有序链表的头指针head1 和 head2,打印两个链表的公共部分【代码】 public void printCompareNode(Node n1, Node n2) { while (n1 != null && n2 != null) { if (n1.value < n2.value) { ...

2020-04-18 18:52:06

07-01.判断二叉树是否为平衡二叉树

题目输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。代码class Solution { public boolean isBalanced(TreeNode root) { return pocess(root).isBalanced; } public class ...

2020-04-13 01:29:38

06-03.统计完全二叉树的节点个数

题目给定一棵完全二叉树的头节点head,返回这棵树的节点个数.代码/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x;...

2020-04-12 16:58:54

06-02.寻找元素最左出现的位置

1.题目对于一个有序数组arr,再给定一个整数num,请在arr中找到num这个数出现的最左边的位置代码 public int getLeftIndex(int[] array, int num) { int length = array.length; int left = 0; int right = length - 1; ...

2020-04-12 12:48:49

查看更多

勋章 我的勋章
  • 专栏达人
    专栏达人
    授予成功创建个人博客专栏的用户。专栏中添加五篇以上博文即可点亮!撰写博客专栏浓缩技术精华,专栏达人就是你!
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。