传说中的15道常见的基础算法题java解法

本文分享了15道经典的算法题目,包括寻找链表公共节点和二叉树问题,使用Java语言进行解答。虽然经过测试,但可能存在非最优解,如第13题的解决方案。
摘要由CSDN通过智能技术生成
15道常见的基础算法题:
1、合并排序,将两个已经排序的数组合并成一个数组,其中一个数组能容下两个数组的所有元素;
2、合并两个已经排序的单链表;
3、倒序打印一个单链表;
4、给定一个单链表的头指针和一个指定节点的指针,在O(1)时间删除该节点;
5、找到链表倒数第K个节点;
6、反转单链表;
7、通过两个栈实现一个队列;(没有贴出来)
8、二分查找;
9、快速排序;
10、获得一个int型的数中二进制中1的个数;
11、输入一个数组,实现一个函数,让所有奇数都在偶数前面;
12、判断一个字符串是否是另一个字符串的子串;
13、把一个int型数组中的数字拼成一个串,这个串代表的数字最小;
14、输入一颗二叉树,输出它的镜像(每个节点的左右子节点交换位置);

15、输入两个链表,找到它们第一个公共节点;


经过了测试,不过肯定有考虑不周全的,有些答案估计也不是最优解,比如第13道题。直接贴代码,思路应该都还比较简单。

<span style="font-size:14px;">package org.whut.choumiaoer.write;

/**
 * 合并排序,将两个已经排序的数组合并成一个数组,其中一个数组能容下两个数组的所有元素;
 */
public class mergeSortedArray {
    public void merge(int[] A,int m,int[] B,int n){
        int i=m-1;
        int j=n-1;
        int t=m+n-1;
        while(t>0){
            if(j<0||(j>=0&&A[i]>B[j])){
                A[t--]=A[i--];
            }else{
                A[t--]=B[j--];
            }
        }
        for(int s=0;s<m+n;s++){
            System.out.print(A[s]+" ");
        }
    }
}</span>
<span style="font-size:14px;">package org.whut.choumiaoer.write;

import org.whut.choumiaoer.linked.basic.ListNode;

/**
 * 合并两个已经排序的单链表
 */
public class mergeSortedListNode {
    public static ListNode merge(ListNode p1,ListNode p2){
        ListNode head=new ListNode(0);
        ListNode p=head;
        while(p1!=null&&p2!=null){
            if(p1.val<p2.val){
                p.next=p1;
                p1=p1.next;
            }else{
                p.next=p2;
                p2=p2.next;
            }
            p=p.next;
        }
        if(p1==null){
            p.next=p2;
        }
        if(p2==null){
            p.next=p1;
        }
        return head.next;
    }
}
</span>
<span style="font-size:14px;">package org.whut.choumiaoer.write;

import org.whut.choumiaoer.linked.basic.ListNode;

/**
 * 反转单链表
 */
public class ReOrderListNode {
    public static ListNode reOrder(ListNode head){
        if(head==null){
            return head;
        }
        ListNode p=head;
        ListNode p1=head.next;
        p.next=null;
        while(p1!=null){
            ListNode p2=p1.next;
            p1.next=p;
            p=p1;
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值