首页 > 其他分享 >完整的合并有序链表(包括节点定义 生成链表 合并)

完整的合并有序链表(包括节点定义 生成链表 合并)

时间:2023-01-29 22:24:16浏览次数:36  
标签:ListNode val int 合并 public 链表 节点 size

1.定义节点

public class ListNode {
    int val;
    ListNode next;

    public ListNode() {
    }

    public ListNode(int val) {
        this.val = val;
    }

    public ListNode(int val, ListNode next) {
        this.val = val;
        this.next = next;
    }
}

2.操作生成链表

class MyLinkedList {
    int size=0;
    ListNode head;

    public MyLinkedList() {
        head=new ListNode(0);//长度+1,计算的时候要加上


    }
    
    public int get(int index) {
        if(index<0||index>=size)
        return -1;
        ListNode cur=head;
        for(int i=0;i<=index;i++){
            cur=cur.next;
        }
        return cur.val;

    }
    
    public void addAtHead(int val) {
        addAtIndex(0,val);

    }
    
    public void addAtTail(int val) {
        addAtIndex(size,val);

    }
    
    public void addAtIndex(int index, int val) {
        if(index>size)return;
        if(index<0)index=0;
        size++;
        ListNode pre=head;
        for(int i=0;i<index;i++){
            pre=pre.next;
        }
        ListNode temp=new ListNode(val);
        temp.next=pre.next;
        pre.next=temp;
        

    }
    
    public void deleteAtIndex(int index) {
        if(index<0||index>=size)return;
        size--;
        ListNode pre=head;
        for(int i=0;i<index;i++){
            pre=pre.next;

        }
        pre.next=pre.next.next;

    }
}

3.合并操作

public class Solution1 {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        ListNode dummy=new ListNode(-1),p=dummy;
        ListNode p1=list1,p2=list2;
        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=p1;
        }
        if(p2!=null){
            p.next=p2;
        }
        return dummy.next;


    }
    public static void main(String[] args){

        MyLinkedList list1 = new MyLinkedList();
        MyLinkedList list2 = new MyLinkedList();
        list1.addAtTail(1);
        list1.addAtTail(2);
        list2.addAtTail(1);
        list2.addAtTail(3);

        Solution1 solution = new Solution1();
        ListNode listNode = solution.mergeTwoLists(list1.head.next, list2.head.next);
        while (listNode!=null){
            System.out.println(listNode.val);
            listNode=listNode.next;
        }
    }
}

 

标签:ListNode,val,int,合并,public,链表,节点,size
From: https://www.cnblogs.com/upupup-999/p/17073964.html

相关文章

  • JavaScript学习笔记—DOM之元素节点
    元素节点对象(element)在网页中,每一个标签都是一个元素节点如何获取元素节点对象?通过document对象来获取元素节点通过document对象来创建元素节点通过document来获......
  • 双向链表 添加与遍历
    packagecom.pay.test;//定义节点publicclassDoubleLinkedList{//初始化头节点privateHeroNodehead=newHeroNode(0,"","");//返回节点头p......
  • (AtCoder Beginner Contest 287)(D 字符串前后缀合并匹配)(E Trie求最长公共前缀(LCP)
    D-MatchorNot(字符串前后缀合并匹配)题目大意:给定两个字符串S和T,对于每个x=0,1,2...|T|求S的子串(前x个字符和后|T|-x个字符在不改变顺序的情况下组成)是否与T相......
  • 遍历树节点
    exportconstforeachTree=(data,callback,childrenName='children')=>{for(leti=0;i<data.length;i++){callback(data[i])if(data[i][ch......
  • 力扣-82-删除排序链表中的重复元素Ⅱ
    这个删除重复不太常规的是:它不是删除多出来的剩下一个,而是比如有三个1,1重复了,那这三个1节点都不要 ListNode*deleteDuplicates(ListNode*head){ if(!head)returnh......
  • 17种编程语言实现排序算法-合并排序
    开源地址​​https://gitee.com/lblbc/simple-works/tree/master/sort/​​覆盖语言:C、C++、C#、Java、Kotlin、Dart、Go、JavaScript(JS)、TypeScript(TS)、ArkTS、swift、......
  • Rancher 集群添加节点
    Rancher集群添加节点 1. 打开集群管理  2. 进入要添加节点的集群  3. 点击注册,并点选所需的集群角色,再左键单击注册命令,以复制注册命令。  4. 复......
  • 力扣-56-合并区间
    好吧,上一题排序的思路其实是这一题的…......
  • 【C++ 数据结构:链表】二刷LeetCode707设计链表
    【C++链表】使用c++重新写一遍LeetCode707设计链表目的是熟悉c++中链表的操作知识点C++链表节点的实现在c++中,一般通过结构体来定义链表的节点,也需要写构造函数(使用初......
  • 剑指pffer 06. 从尾到头打印链表
    1.题目输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。2.代码方法一:/***Definitionforsingly-linkedlist.*publicclassListNode{*intval......