链表的头插,尾插,逆序 and 合并两个有序表

本文详细介绍了如何在Java中使用NodeX类实现链表的头插法、尾插法、逆序操作,以及合并两个有序链表和数组的方法。
摘要由CSDN通过智能技术生成

链表的头插,尾插,逆序(20min)

import java.util.Arrays;
import java.util.Scanner;

public class NodeUse {
    // 头插法
    public static NodeX headSert(int[] arr){
        NodeX head = null;
        for(int i = 0; i < arr.length; i++){
            NodeX q = new NodeX(arr[i]);
            q.next = head;
            head = q;
        }
        return head;
    }
    // 尾插法
    public static NodeX tailSert(int[] arr){
        NodeX head = new NodeX();
        NodeX p = head;
        for(int i = 0; i < arr.length; i++){
            NodeX q = new NodeX(arr[i]);
            p.next = q;
            q.next = null;
            p = q;
        }
        return head.next;
    }
    // 逆序
    public static NodeX reserseNode(NodeX head){
        NodeX p = head.next;
        NodeX q = head;
        NodeX w;
        q.next = null;
        while(p != null){
            w = p.next;
            p.next = q;
            q = p;
            p = w;
        }
        return q;
    }


    public static void main(String[] args) {
        // 进行实际操作
        Scanner in = new Scanner(System.in);
        System.out.println("请输入个数:");
        int num = in.nextInt();
        int[] arr = new int[num];
        System.out.println("输入数组:");
        for(int i = 0; i < num; i++){
            arr[i] = in.nextInt();
        }
        System.out.println(Arrays.toString(arr));
        NodeX head = headSert(arr);
        System.out.println("头插法:" + head.toString());
        head = null;
        head = tailSert(arr);
        System.out.println("尾插法:" + head.toString());
        head = reserseNode(head);
        System.out.println("逆序:" + head.toString());
    }
}
class NodeX{
    int val;
    NodeX next;
    public NodeX(){}
    public NodeX(int val){
        this.val = val;
    }
    public String toString(){
        if(next == null)
            return val + "";
        return val + " -> " + next.toString();    
    }
}

合并两个有序链表

public static LinkNode hand(LinkNode link1 ,LinkNode link2){  //合并两个有序链表
       LinkNode link3=new LinkNode();
       LinkNode flag=link3;
       while (link1!=null &&link2!=null){
           int a=link1.key;
           int b=link2.key;
           if (a<b){
               flag.next = link1;
               flag=flag.next;
               link1=link1.next;
           }else {
               flag.next = link2;
               flag=flag.next;
               link2=link2.next;
           }
       }
       if (link1==null){
           flag.next = link2;
       }else {
           flag.next = link1;
       }
       return link3.next;
   }

合并两个有序数组(5min)

import java.util.Arrays;

public class Codetest {
    
	public static void main(String[] www) {
    	int[] arr1 = {1,2,4,6,8,9,11,14,17,21,24,26,33};
    	int[] arr2 = {2,5,8,9,11,14,17,21,22};
    	int[] arr3 = merge(arr1,arr2);
    	System.out.println(Arrays.toString(arr3));
    }
    // 合并有序数组
	public static int[] merge(int[] x1, int[] x2) {
		int[] x3 = new int[x1.length + x2.length];
		int q = 0;
        int p = 0;
        int i = 0;
        while(q < x1.length && p < x2.length){
            x3[i++] = x1[q] > x2[p] ? x2[p++]:x1[q++];
        }
        while(q < x1.length){
            x3[i++] = x1[q++];
        }
        while(p < x2.length){
            x3[i++] = x2[p++];
        }
		return x3;
	}
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值