zoukankan      html  css  js  c++  java
  • 《剑指offer》思路整理(Java)

    leetcode:https://leetcode-cn.com/problemset/lcof

    数据结构

    --数组

    --链表

    21

    22链表中倒数第k个节点

    class Solution {
        public ListNode getKthFromEnd(ListNode head, int k) {
            if(head == null && head.next ==null){
                return head;
            }
            //定义p、q指针指向head,p先向前走k步,接着p、q同时向前走,
            //当p指向null时,q指向的节点即为链表的倒数第k个节点。   
            ListNode p =head,q =head;
            while(k-- > 0){
                p = p.next;
            }
            while(p!=null){
                p =p.next;
                q =q.next;
            }
            return q;
        }
    }
    View Code

    24反转链表

    class Solution {
        public ListNode reverseList(ListNode head) {
            ListNode pre = null;
            ListNode p =head;
            //通过q为中间值实现前后节点反转
            while(p !=null){
                ListNode q= p.next;
                p.next =pre;
                pre = p;
                p=q;
            }
            return pre;
        }
    }
    View Code

    25合并两个排序的链表

    class Solution {
        public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
            //先判断l1和l2是否为空,是则直接返回另一链表
            if(l1 == null){
                return l2;
            }
    
            if(l2==null){
                return l1;
            }
    
            //构造新的链表存放2个合并后的链表
            ListNode head = new ListNode(0);
            ListNode p =head;
            while(l1!=null && l2!=null){
                //如果l1的值比l2的小就先存放l1的值,注意节点的连接处理
                if(l1.val<l2.val){
                    ListNode t = l1.next;
                    p.next = l1;
                    p = l1;
                    l1=t;
                } else {
                    ListNode t = l2.next;
                    p.next = l2;
                    p = l2;
                    l2=t;
                }
            }
            //从l1/l2中补上不为空的末尾节点
            p.next=l1==null?l2:l1;
            return head.next;
        }
    }
    View Code

    --树

    26树的子结构

    遍历头结点、遍历左子树、遍历右子树。首先按照A和B的值是否相等划分为两种情况:一是判断头结点及左右结点是否都相等,返回true;二是判断B是不是A的左子结构或者是右子结构,返回true。在递归循环终止条件中只要B为null了,则证明遍历完成返回true。如果A为null了,B不为null则可以判定A未完全包含B。

    27二叉树的镜像

    28对称的二叉树

    29

    算法

    --贪心

    --动态规划

  • 相关阅读:
    左耳听风-ARTS-第4周(2019/4/21-2019/4/27)
    Java集合总结
    Zuul网关总结
    左耳听风-ARTS-第3周(2019/4/7-2019/4/13)
    左耳听风-ARTS-第2周(2019/3/31-2019/4/6)
    Java泛型相关总结(下)
    左耳听风-ARTS-第1周
    去长江边走走,看看
    第1记
    c#发送邮件
  • 原文地址:https://www.cnblogs.com/darklights/p/13222259.html
Copyright © 2011-2022 走看看