返回顶部
首页 > 资讯 > 精选 >Java中链表题有哪些
  • 366
分享到

Java中链表题有哪些

2023-06-21 21:06:40 366人浏览 安东尼
摘要

这篇文章主要介绍了Java中链表题有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。第一题 移除链表元素给你一个链表的头节点 head 和一个整数 val ,请你删除链表中

这篇文章主要介绍了Java中链表题有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

第一题 移除链表元素

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 node.val == val 的节点,并返回 新的头节点 。

Java中链表题有哪些

输入:head = [1,2,6,3,4,5,6], val = 6

输出:[1,2,3,4,5]

这道题还是比较简单的我们需要让删除的节点的前一个结点指向删除节点的后一个就行。就比如cur.next==cur.next.next;。

class Solution {    public ListNode removeElements(ListNode head, int val) {        ListNode header=new ListNode(-1);        header.next=head;        ListNode cur =header;        while(cur.next!=null){            if(cur.next.val==val){                 cur.next=cur.next.next;            }else{                cur=cur.next;            }        }return header.next;    }}

第二题 反转链表

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

Java中链表题有哪些

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

输出:[5,4,3,2,1]

这也是一个简单题,我们还是先弄一个尾结点,因为链表的最后一个结点的下一个是一个null,这道题我们可以通过一次循环让后一个结点的下一个结点指向前一个结点。

class Solution {    public ListNode reverseList(ListNode head) {        ListNode pre =null;        ListNode cur=head;        while(cur!=null){            ListNode next=cur.next;            cur.next=pre;            pre=cur;            cur=next;        }      return pre;    }}

第三题 链表的中心结点

给定一个头结点为 head 的非空单链表,返回链表的中间结点。

如果有两个中间结点,则返回第二个中间结点。

答:这个也是一个简单题我们需要用到快慢指针,当快指针指完之后,慢的结点肯定是中点比如18 快的可以走9步每次走两步走到18,慢的可以每次走一部走9步。刚好到中点。

class Solution {    public ListNode middleNode(ListNode head) {        ListNode p =head;        ListNode q =head;        while(q!=null&&q.next!=null){            q=q.next.next;            p=p.next;        }return p;    }}

第四题 倒数第k个结点

输入一个链表,输出该链表中倒数第k个结点

输入:

1,{1,2,3,4,5}

复制

返回值:

{5}

答:这道题也是一个简单题,直接简单粗暴的搞出来倒数第k个点的值就行;

public class Solution {    public ListNode FindKthToTail(ListNode head,int k) {                ListNode cur=head;        ListNode pre=head;        int count=0;        int x=0;                while(cur!=null){                        cur=cur.next;            count++;        }        if(k<0||k>count){            return null;        }        while(pre!=null){             if(x==count-k){               break;            }else{            pre=pre.next;            x++;             }        } return pre;    }}

这道题写的有点麻烦了,我们也可以用快慢指针做。一个指针走5步一个走4步。

public class Solution {    public ListNode FindKthToTail(ListNode head,int k) {        ListNode p=head;        ListNode q=head;       for(int i = 0; i < k; i++) {           if (p != null) {            p= p.next;        } else {            return null;        }    }        while(p!=null){            p=p.next;            q=q.next;        }        return q;    }}

第五题 合并两个有序链表

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

Java中链表题有哪些

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

输出:[1,1,2,3,4,4]

答:这道题考到了怎么将两个链表合并,我们需要将两个链表从大到小合并起来。

class Solution {    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {       ListNode dummyHead = new ListNode(0);        ListNode cur = dummyHead;        while (l1 != null && l2 != null) {            if (l1.val < l2.val) {                cur.next = l1;                cur = cur.next;                l1 = l1.next;            } else {                cur.next = l2;                cur = cur.next;                l2 = l2.next;            }        }        // 任一为空,直接连接另一条链表        if (l1 == null) {            cur.next = l2;        } else {            cur.next = l1;        }        return dummyHead.next;    }}

第六题 链表分割

现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。

输入:l1 = [1,2,1,3,2] 3

输出:[1,2,1,2,3]

这道题比较难了需要我们创建两个链表,一个数大与等于x的链表,另一个数小于x的链表。然后让上一个链表的下一个尾结点指向下一个结点的尾巴结点。

这里我们需要用到如何将两个链表合并成一个链表。

做题的时候先想怎么做然后在动手!

public class Partition {    public ListNode partition(ListNode pHead, int x) {        if(pHead == null || pHead.next == null) {            return pHead;        }        ListNode newHead = new ListNode(0);        ListNode flagHead = new ListNode(0);        ListNode newh = newHead;        ListNode flagh = flagHead;        while(pHead != null){            if(pHead.val < x){                newh.next = new ListNode(pHead.val);                newh = newh.next;            }else{                flagh.next = new ListNode(pHead.val);                flagh = flagh.next;            }            pHead = pHead.next;        }        newh.next = flagHead.next;        return newHead.next;    }}

第七题 判断是否回文

对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。

给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。

1->2->2->1

返回:true

public class PalindromeList {    public boolean chkPalindrome(ListNode head) {        // write code here         ListNode fast=head;        ListNode slow=head;        while(fast!=null && fast.next!=null) {            fast = fast.next.next;            slow = slow.next;        }         ListNode cur=slow.next;        while(cur!=null){            ListNode curNext=cur.next;            cur.next=slow;            slow=cur;            cur=curNext;        }        //3.一个从前往后,一个从后往前  如果相遇,则证明回文        while(head!=slow){            if(head.val!=slow.val){//先判断值是否相等                return false;            }            if(head.next==slow){//偶数情况下                return true;            }            head=head.next;            slow=slow.next;    }        return true;    }

第八题 相交链表

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。

Java中链表题有哪些

可以用笨方法就是计算出来每个链表的个数然后让多的先走。

public class Solution {    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {        if (headA == null || headB == null) {            return null;        }                ListNode last = headB;        while (last.next != null) {            last = last.next;        }last.next = headB;        ListNode fast = headA;        ListNode slow = headA;        while (fast != null && fast.next != null) {            slow = slow.next;            fast = fast.next.next;            if (slow == fast) {                slow = headA;                while (slow != fast) {                    slow = slow.next;                    fast = fast.next;                }                last.next = null;                return fast;            }        }        last.next = null;        return null;    }}

感谢你能够认真阅读完这篇文章,希望小编分享的“Java中链表题有哪些”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网精选频道,更多相关知识等着你来学习!

--结束END--

本文标题: Java中链表题有哪些

本文链接: https://lsjlt.com/news/300935.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java中链表题有哪些
    这篇文章主要介绍了Java中链表题有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。第一题 移除链表元素给你一个链表的头节点 head 和一个整数 val ,请你删除链表中...
    99+
    2023-06-21
  • Java链表面试题有哪些
    这篇文章主要为大家展示了“Java链表面试题有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Java链表面试题有哪些”这篇文章吧。第一题题目:反转一个单链表每个节点是不变的,只是修改当前每个...
    99+
    2023-06-29
  • C++链表练习题有哪些
    这篇文章主要为大家展示了“C++链表练习题有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C++链表练习题有哪些”这篇文章吧。反转单链表题目1:给你单链表的头节点 head&nbs...
    99+
    2023-06-29
  • java反转链表的方法有哪些
    在Java中,可以使用迭代和递归两种方法来反转链表。 迭代法: public ListNode reverseList(List...
    99+
    2024-04-02
  • php的链表有哪些
    这篇“php的链表有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php的链表有哪些”文章吧。在php中,链表是一种基础...
    99+
    2023-06-29
  • php中链表的表现形式有哪些
    这篇文章主要介绍php中链表的表现形式有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!循环链表就像上文所说的,我们让最后一个节点指向第一个节点,这样形成的链表就是一个循环链表,如下图所示:关于循环的链表的操作我们...
    99+
    2023-06-20
  • 有哪些链表的小技巧
    本篇内容介绍了“有哪些链表的小技巧”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!链表链表是数据结构里一个很基础但是又很爱考的线性结构,链表的...
    99+
    2023-06-16
  • java数据结构单向链表的操作有哪些
    本文小编为大家详细介绍“java数据结构单向链表的操作有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“java数据结构单向链表的操作有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。关于节点数据添加:尾添...
    99+
    2023-07-06
  • C++数据结构中链表有哪些操作
    这篇文章主要为大家展示了“C++数据结构中链表有哪些操作”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C++数据结构中链表有哪些操作”这篇文章吧。首先创建好一个节点typedef st...
    99+
    2023-06-25
  • Java中的速查表有哪些
    Java中的速查表有哪些?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。访问控制:private 私有的protected 受保护的public 公共的类、方法和变量修饰符abs...
    99+
    2023-05-31
    java ava 速查表
  • Java中有哪些Spring面试题
    本篇内容主要讲解“Java中有哪些Spring面试题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中有哪些Spring面试题”吧!谈谈你对 Spring 的理解?Spring 是一个开源...
    99+
    2023-06-16
  • C++中检测链表中的循环方法有哪些
    这篇文章主要讲解了“C++中检测链表中的循环方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++中检测链表中的循环方法有哪些”吧!给定一个链表,检查链表是否有循环。下图显示了带有循...
    99+
    2023-06-15
  • Java中责任链模式的特点有哪些
    本篇文章给大家分享的是有关Java中责任链模式的特点有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。定义:使多个对象都有机会处理请求,从而避免了请求的发送者和接收者之间的耦...
    99+
    2023-05-31
    java 责任链模式 ava
  • 关于链表的知识点有哪些
    本篇内容介绍了“关于链表的知识点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一 单向链表1.1 &...
    99+
    2024-04-02
  • C语言链表的操作有哪些
    这篇“C语言链表的操作有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言链表的操作有哪些”文章吧。前言编译工具:vs...
    99+
    2023-06-30
  • Redis中快速表、压缩表和双向链表的区别有哪些
    这篇文章主要介绍Redis中快速表、压缩表和双向链表的区别有哪些,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!前言最近在看《Redis的设计与实现》这本书,写的真的是太好了,一下子就看入迷了,谢谢作者。不过在学习的时...
    99+
    2023-06-14
  • java中io流面试题有哪些
    这篇文章主要介绍了java中io流面试题有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Java可以用来干什么Java主要应用于:1. web开发;2. Android开...
    99+
    2023-06-14
  • Java中Mybatis的面试题有哪些
    这篇文章给大家分享的是有关Java中Mybatis的面试题有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1. MyBatis 中 #{}和 ${}的区别是什么?#{}是预编译处理,${}是字符替换。 在使用...
    99+
    2023-06-20
  • java中的易混问题有哪些
    今天给大家介绍一下java中的易混问题有哪些。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。第一,final, finally, finalize的区别。fin...
    99+
    2023-06-03
  • Java练习题有哪些
    这篇文章给大家分享的是有关Java练习题有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、在异常处理中,如释放资源,关闭数据库、关闭文件应由( )语句来完成。正确答案: C try子句catch子句fina...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作