• 合并两个链表


    ci博客链接:

    合并两个链表

    题目链接:https://leetcode-cn.com/problems/merge-two-sorted-lists/submissions/

    题目

    将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 

    示例 1:


    输入:l1 = [1,2,4], l2 = [1,3,4]
    输出:[1,1,2,3,4,4]
    示例 2:

    输入:l1 = [], l2 = []
    输出:[]
    示例 3:

    输入:l1 = [], l2 = [0]
    输出:[0]

    题解

    新建一个链表,在两个链表都不为空的情况下,比较两个链表中元素的值,取小的元素加入到新的链表中,最后判断两个链表那个链表不为空,链接到新链表中即可。

    代码

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode() {}
     *     ListNode(int val) { this.val = val; }
     *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
     * }
     */
    class Solution {
        public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
          ListNode newnode=new ListNode(0);
          ListNode p=newnode;
              while(l1!=null&&l2!=null){
                if(l1.val<l2.val){
                    p.next=l1;
                    p=p.next;
                    l1=l1.next;
                }
                else{
                    p.next=l2;
                    p=p.next;
                    l2=l2.next;
                }
              }
              if(l1!=null){
                  p.next=l1;
              }
              if(l2!=null){
                  p.next=l2;
              }
          
    return newnode.next;
        }
    }

    结果

    翻转链表

    题目链接:https://leetcode-cn.com/problems/reverse-linked-list/

    题目

    给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
     

    示例 1:


    输入:head = [1,2,3,4,5]
    输出:[5,4,3,2,1]
    示例 2:


    输入:head = [1,2]
    输出:[2,1]
    示例 3:

    输入:head = []
    输出:[]

    题解

    翻转链表我一般都是使用头插法来做,头插法的思想是,新建一个链表,然后一个一个取老的链表中的元素,当取到一个元素时,先把元素的next指向新链表头部next的那个元素,然后再把新链表的头部的next指向新取的元素,这就是在一个链表额的头部插入一个元素,需要先连后断,所以要先把取到元素的next指向新链表头部的next,然后在用新链表的头部指向取到的元素。

    代码

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode() {}
     *     ListNode(int val) { this.val = val; }
     *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
     * }
     */
    class Solution {
        public ListNode reverseList(ListNode head) {
           ListNode newnode=new ListNode(0);
           ListNode p=head;
           while(p!=null){
               ListNode q=p;
               p=p.next;
               q.next=newnode.next;
               newnode.next=q;
           }
           return newnode.next;
        }
    }

    结果

    出来混总是要还的
  • 相关阅读:
    react.js
    shell if,case,for,while语法
    shell判断文件类型和权限
    shell编程之sed语法
    php魔术方法__SET __GET
    git 忽略文件.gitignore
    php设置错误,错误记录
    linux ifconfig显示 command not found
    数据库备份与恢复
    mysql主要技术
  • 原文地址:https://www.cnblogs.com/ping2yingshi/p/15069075.html
Copyright © 2020-2023  润新知