Leetcode、牛客、PTA原题:“回文链表”和“合并有序

Leetcode、牛客、PTA原题:“回文链表”和“合并有序链表”

一、题目要求:回文链表

解题:

代码:

class Solution {
    public boolean isPalindrome(ListNode head) {
      ListNode p1 = replace(head);
      while(head != null && p1 != null){
        // 存在不同值的节点时
        if(head.val != p1.val){
          return false;
        }
        head = head.next;
        p1 = p1.next;
      }
      return true;
    }

    // 反转链表
    public ListNode replace(ListNode head){
      //        创建一个新链表,n1为头指针先指向空
        ListNode n1 = null;
//        创建一个p节点,获取旧链表
        ListNode p = head;
//        遍历旧链表,当不为空说明还有下一节点
        while (p != null){
//            使用头插入,将每次遍历到的节点插入到新链表头
            n1 = new ListNode(p.val, n1);
//            旧链表的下一节点
            p = p.next;
        }
//        返回新链表
        return n1;
    }
}

思路: 先将原链表==反转==,将反转后的链表与原链表进行逐一节点值的对比。反转链表的讲解请参考反转链表关键点: 在反转链表时,不可以使用递归算法进行链表的反转,因为使用链表的话,其实链表的地址是没有发生改变的。因此在比较时无法通过某些测试点。

二、题目要求:合并两个有序链表

题解:

代码:

class Solution {
    public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
      // // 创建一个带有哨兵节点新的链表
      // ListNode s = new ListNode(-1,null);
      // // 新链表的指针
      // ListNode p = s;
      // // 判断两个链表的每个节点比较大小
      // while(list1 != null && list2 != null){
      //   // list1<list2的情况
      //   if(list1.val < list2.val){
      //     // 将list1的节点值链接到新链表s
      //     p.next = list1;
      //     // 将list1往后移一位
      //     list1 = list1.next;
      //   }else{
      //     // 同理
      //     p.next = list2;
      //     list2 = list2.next;
      //   }
      //   // 将新链表添加成功一个节点后往后移一位
      //   p = p.next;
      // }
      // // 判断list1和list2那个链表先不为空,将剩下的链表接到新链表中
      // if(list2 != null){
      //   p.next = list2;
      // }
      // if(list1 != null){
      //   p.next = list1;
      // }
      // // 返回带有哨兵节点的新链表
      // return s.next;


      // 递归实现
      if(list1 == null){
        return list2;
      }
      if(list2 == null){
        return list1;
      }
      if(list1.val < list2.val){
        // 链表1往后移一位,继续与p2当前节点比较。并返回当前节点
        list1.next = mergeTwoLists(list1.next,list2);
        return list1;
      }else{
        list2.next = mergeTwoLists(list1,list2.next);
        return list2;
      }

    }

思路1:创建一个带有==指针p==和==哨兵节点==的新链表p,初始化状态时将s=null,p = s。对于链表l1和链表l2。首先:保证两个链表都未到==尾节点(null)==,对l1.val 与 l2.val进行比较,若l1.val < l2.val时,将l1.val连接到p然后节点往后移一位。对于l1.val > l2.val的情况也是同理处理即可。最后要对那个链==未空==进行确定,将==未空链表的剩下节点全部连接到p即可。

图解:

思路2: 递归实现递归实现时,无需创建新的链表。若l1.val < l2.val,则递归让l1后移一位,但l2留在原地。对于l1.val>l2.val的情况只需要做相反操作即可。最后一步处理的是那个链表上的节点就将那个链表进行返回即可得到合并后的链表

图解:

总结:

一开始对于回文链表使用==递归==反转链表后于原链表进行对比时,总是有一个测试点[1,1,2,1]未通过,查看反转后的链表也确实反转过来了。一直搞不懂为什么会不通过。原来是递归后返回的链表==内存地址指向于原链表相同==在比较时并不是比较节点值,比较了节点的地址那当然一致了。因此要使用新建链表的方式进行反转后再对比。

#算法##数据结构##牛客##链表#
基础算法刷题题解 文章被收录于专栏

记录自己刷题的题解。坚持每天更新

全部评论

相关推荐

03-19 18:27
已编辑
门头沟学院 C++
26学院本太难了,很多公司机筛就给我刷了。机会都难拿到如果是简历存在问题也欢迎拷打————————————————————分割线——————————————————————2026.3.4更新:发完贴之后,时不时投递又收到了不少的笔试/面试邀请。主要是之前投递简历出去之后基本上都是沉默状态,年后好转了不少timeline:2026.01.21&nbsp;文远知行笔试,半年多没刷算法题&nbsp;-&gt;挂&nbsp;(后续HR说春招可以重新安排笔试)2026.2.4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;小鹏汇天&nbsp;技术一面,第二周收到结果&nbsp;-&gt;挂2026.2.12&nbsp;&nbsp;&nbsp;大众Cariad代招&nbsp;技术二面&nbsp;-&gt;Offer2026.2.28&nbsp;&nbsp;&nbsp;多益网络技术面试,由于风评太差,一直在犹豫要不要接面试&nbsp;-&gt;推迟-----------分割线-----------2026.3&nbsp;月前的某一天,临时去电网报名了二批计算机岗位的笔试2026.3.6&nbsp;从上家公司实习离职,氛围最好的一家公司,leader&nbsp;说可以帮忙转正,但是流程太长,而且我们部门据说只有一个&nbsp;hc,更想要研究生,我很有可能是会被签外包公司在这里干活,就离职了。2026.3.9&nbsp;入职新公司,大众Cariad&nbsp;以外部公司的身份进组,项目组签了三年,后续三年应该都可以在这里呆,不知道有没有希望原地跳槽。2026.3.10&nbsp;电网考试居然说我通过资格审查了,短信约我去参加资格审查,请假一天,买了&nbsp;12&nbsp;号晚上的机票回成都2026.3.15&nbsp;参加国家电网三新计算机类的笔试2026.3.17&nbsp;电网出成绩了,感觉很低。觉得已经🈚️了2026.3.18&nbsp;收到电网面试通知,通知&nbsp;3.22-3.25&nbsp;这个时间去面试,我的岗位只招&nbsp;1&nbsp;个人。据说面试只有&nbsp;2-3&nbsp;人,不知道能不能成功
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 春招至今,你的战绩如何? #
11066次浏览 94人参与
# 你的实习产出是真实的还是包装的? #
1956次浏览 42人参与
# 巨人网络春招 #
11366次浏览 223人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7641次浏览 43人参与
# 简历第一个项目做什么 #
31744次浏览 341人参与
# 重来一次,我还会选择这个专业吗 #
433547次浏览 3926人参与
# 米连集团26产品管培生项目 #
6035次浏览 216人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187208次浏览 1122人参与
# 牛客AI文生图 #
21446次浏览 238人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152451次浏览 888人参与
# 研究所笔面经互助 #
118966次浏览 577人参与
# 简历中的项目经历要怎么写? #
310361次浏览 4219人参与
# AI时代,哪些岗位最容易被淘汰 #
63820次浏览 828人参与
# 面试紧张时你会有什么表现? #
30510次浏览 188人参与
# 你今年的平均薪资是多少? #
213138次浏览 1039人参与
# 你怎么看待AI面试 #
180137次浏览 1258人参与
# 高学历就一定能找到好工作吗? #
64331次浏览 620人参与
# 你最满意的offer薪资是哪家公司? #
76545次浏览 374人参与
# 我的求职精神状态 #
448134次浏览 3129人参与
# 正在春招的你,也参与了去年秋招吗? #
363515次浏览 2638人参与
# 腾讯音乐求职进展汇总 #
160675次浏览 1112人参与
# 校招笔试 #
471196次浏览 2964人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务