链表相关题目

简单题

判断一个链表中是否有环

快慢指针法
设置两个指针,一个指针每次走两步,另一个每次走一步,若两者相遇,则必然存在环。

public class Solution {
    public boolean hasCycle(ListNode head) {
        ListNode slow = head;
        ListNode fast = head;
        while(fast!=null && fast.next!=null){
            slow = slow.next;
            fast = fast.next.next;
            if (slow==fast)
                return true;
        }
        return false;
    }
}


合并两个有序链表

head tail指针
设置头尾指针,头指针作为返回的头节点,尾指针作为每次向链表中添加的节点

  1. 找两个链表中较小的头节点作为新链表的头节点head;tail指向head
  2. 依次比较两个链表中未合并部分的头(L1 L2),并将较小者连接到tail后面。tail后移
  3. 处理剩余的节点。(直接连接过来即可)
import java.util.*;

/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param l1 ListNode类 
     * @param l2 ListNode类 
     * @return ListNode类
     */
    public ListNode mergeTwoLists (ListNode l1, ListNode l2) {
        // write code here
        ListNode temp;
        if(l1 == null) return l2;
        if(l2 == null) return l1;
        ListNode head = l1.val < l2.val ? l1 : l2;
        ListNode tail = head;
        l1 = (head == l1)? l1.next:l1;
        l2 = (head == l2) ? l2.next:l2;

        while(l1!=null && l2!=null){
            if(l1.val<=l2.val) {tail.next = l1; l1=l1.next;}
            else {tail.next = l2; l2 = l2.next;}
            tail = tail.next;
        }
        tail.next = l1==null? l2: l1;

        return head;

    }
}

此外,本题还可以用递归法解决

        public ListNode mergeTwoLists(ListNode linked1, ListNode linked2) {
        //只要有一个为空,就返回另一个
        if (linked1 == null || linked2 == null)
            return linked2 == null ? linked1 : linked2;
        //把小的赋值给first
        ListNode first = (linked2.val < linked1.val) ? linked2 : linked1;
        //当前头的下一个节点,与另一个链表的节点比较
        first.next = mergeTwoLists(first.next, first == linked1 ? linked2 : linked1);
        return first;
    }


全部评论

相关推荐

但听说转正率很低,我现在有在实习了,好纠结要不要去
熬夜脱发码农:转正率低归低,但是实习的经历你可以拿着,又不是说秋招不准备了
点赞 评论 收藏
分享
05-26 22:25
门头沟学院 Java
Java小肖:不会是想叫你过去把你打一顿吧,哈哈哈
点赞 评论 收藏
分享
05-12 17:00
门头沟学院 Java
king122:你的项目描述至少要分点呀,要实习的话,你的描述可以使用什么技术,实现了什么难点,达成了哪些数字指标,这个数字指标尽量是真实的,这样面试应该会多很多,就这样自己包装一下,包装不好可以找我,我有几个大厂最近做过的实习项目也可以包装一下
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务