剑指offer计划链表

剑指offer计划链表

从尾到头打印链表

/**
*    public class ListNode {
*        int val;
*        ListNode next = null;
*
*        ListNode(int val) {
*            this.val = val;
*        }
*    }
*
*/
import java.util.ArrayList;
public class Solution {
    public ArrayList printListFromTailToHead(ListNode listNode) {
        ArrayList num = new ArrayList();
        ArrayList res = new ArrayList();
        while(listNode!=null){
            num.add(listNode.val);
            listNode=listNode.next;
        }
        for(int i = num.size()-1;i>=0; i --){
            res.add(num.get(i));
        }

        return res;
    }
}

反转链表

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

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode ReverseList(ListNode head) {
        if(head==null) return null;
        ListNode pre = null;
        while(head!=null){
            ListNode next=head.next;
            head.next=pre;
            pre = head;
            head = next;
        }
        return pre;
    }
}

合并两个排序的链表

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

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode Merge(ListNode list1,ListNode list2) {
        if(list1==null) return list2;
        if(list2==null) return list1;
        if(list1.val

两个链表的第一个公共结点

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

    ListNode(int val) {
        this.val = val;
    }
}*/
import java.util.HashSet;

public class Solution {
    public ListNode FindFirstCommonNode(ListNode pHead1, ListNode pHead2) {
        HashSet hashset = new HashSet();
        if(pHead1==null || pHead2==null) return null;
        while(pHead1!=null) {
            hashset.add(pHead1);
             pHead1= pHead1.next;
        }
        while(pHead2!=null){
            if(hashset.contains(pHead2)) return pHead2;
            pHead2= pHead2.next;
        }
        return null;

    }
}

链表中环的入口结点

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

    ListNode(int val) {
        this.val = val;
    }
}
*/
import java.util.*;
public class Solution {

    public ListNode EntryNodeOfLoop(ListNode pHead) {
        HashSet hashset = new HashSet();
        while(pHead!=null){
            if(hashset.contains(pHead)){
                return pHead;
            }
            hashset.add(pHead);
            pHead = pHead.next;
        }
        return null;

    }
}

链表中倒数最后k个结点

    public ListNode FindKthToTail(ListNode pHead, int k) {
        if (pHead == null || k == 0) {
            return null;
        }
        int count = 0;
        ListNode temp = pHead;
        while (temp!=null) {
            count ++ ;
            temp = temp.next;
        }
        if (count < k) {
            return null;
        }
        temp = pHead;
        for (int i = 0; i < count - k; i++) {
            temp = temp.next;
        }
        return temp;
    }

复杂链表的复制

/*
public class RandomListNode {
    int label;
    RandomListNode next = null;
    RandomListNode random = null;

    RandomListNode(int label) {
        this.label = label;
    }
}
*/
import java.util.*;
public class Solution {
        Map cachedNode = new HashMap();
        public RandomListNode Clone(RandomListNode pHead) {
         if (pHead == null)   return null;
        if (!cachedNode.containsKey(pHead)) {
            RandomListNode headNew = new RandomListNode(pHead.label);
            cachedNode.put(pHead, headNew);
            headNew.next = Clone(pHead.next);
            headNew.random = Clone(pHead.random);
        }
        return cachedNode.get(pHead);
    }
}

删除链表中重复的结点

public class Solution {
    public ListNode deleteDuplication(ListNode pHead) {
        if (pHead == null || pHead.next == null) { // 只有0个或1个结点,则返回
            return pHead;
        }
        if (pHead.val == pHead.next.val) { // 当前结点是重复结点
            ListNode pNode = pHead.next;
            while (pNode != null && pNode.val == pHead.val) {
                // 跳过值与当前结点相同的全部结点,找到第一个与当前结点不同的结点
                pNode = pNode.next;
            }
            return deleteDuplication(pNode); // 从第一个与当前结点不同的结点开始递归
        } else { // 当前结点不是重复结点
            pHead.next = deleteDuplication(pHead.next); // 保留当前结点,从下一个结点开始递归
            return pHead;
        }
    }
}

Original: https://www.cnblogs.com/cxykhaos/p/15394290.html
Author: 程序员khaos
Title: 剑指offer计划链表

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/714716/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 买车险

    车险到期,电话预约周一把保单送到我公司,我刷卡付款。 周一上午8:25分,我还在上班途中,接到送单员电话说:我已经在你公司了,你什么时候到?我回答说:我上周在电话中说上班时间都可以…

    技术杂谈 2023年6月1日
    085
  • 图床是什么?如何使用图床?

    图床其实是互联网中存储图片的空间,举个栗子: 假设你在微博分享一张图片,你的粉丝可以通过互联网看到你分享的图片,那么他是去访问你的手机的相册吗?其实不是的,你分享图片,也就是把图片…

    技术杂谈 2023年7月25日
    080
  • dremio 对于parquet 文件的一些要求以及优化处理

    dremio 比较依赖parquet 存储格式,同时对于parquet 的处理进行了不少的优化 读parquet 文件 3.1.3 提供了支持非堆内存的操作,3.2 增强了对于云p…

    技术杂谈 2023年5月30日
    0148
  • []产品和成本效率总结提炼

    [原创]产品和成本效率总结提炼 1、个人的成本和效率: 对外(你的产品帮用户降低成本,提升效率)和对内(你的方法有没有更好的方案,如:天猫精灵,解决了必须要用手机控制设备) 2、组…

    技术杂谈 2023年5月30日
    0104
  • HTTP与WebSocket/WebDAV

    WebSocket WebDAV posted @2022-06-15 20:37 放飞梦想C 阅读(29 ) 评论() 编辑 Original: https://www.cnbl…

    技术杂谈 2023年7月24日
    0102
  • paip.语义分析–分词–常见的单音节字词 2_deDuli 单字词 774个

    paip.语义分析–分词–常见的单音节字词 2_deDuli 单字词 774个 作者Attilax 艾龙, EMAIL:1466519819@qq.com来…

    技术杂谈 2023年5月31日
    085
  • CentOS5.5挂载本地ISO镜像

    操作步骤: 一、挂载iso文件到挂载点 [root@server ~ ]# mount -o loop /mnt/iso/CentOS5.iso /mnt/cdrom 二、查看挂载…

    技术杂谈 2023年5月31日
    097
  • 17GDB使用符号表调试release程序

    生成debug版本,strip出release版本发给客户:strip -g program_debug -o program_release 然后通过DEBUG版本进行调试rel…

    技术杂谈 2023年6月1日
    070
  • 加压测试TPS上不去的性能分析

    阶梯式加压测试接口异常可能存在的原因: 压力机本身性能测试的瓶颈 分析:单机负载能力有限,如果需要模拟的用户请求数超过其负载极限,也会间接影响TPS ,可以通过进行分布式压测来解决…

    技术杂谈 2023年5月31日
    085
  • 文件夹(?)[+]

    本文以某公司iPhone 6手机预约接口开发为例,介绍PHP5下SOAP调用的实现过程。 一、基础概念 SOAP(Simple Object Access Protocol )简单…

    技术杂谈 2023年5月31日
    069
  • EasyExcel的基本使用

    官方网址:https://www.yuque.com/easyexcel/doc/easyexcel 应用场景 数据导入:减少录入工作量 数据导出:统计信息归档 数据传输:异构系统…

    技术杂谈 2023年6月21日
    0108
  • Arduino单片机使用和开发问题记录

    1、将程序上传到板子时Arduino IDE提示”avrdude: stk500_getsync(): not in sync: resp=0x00″ 网上…

    技术杂谈 2023年5月30日
    0116
  • 1956和1985高程转换

    Original: https://www.cnblogs.com/gisoracle/p/16394986.htmlAuthor: gisoracleTitle: 1956和19…

    技术杂谈 2023年5月30日
    086
  • 微信二维码支付

    准备工作 概述:微信扫码支付是商户系统按微信支付协议生成支付二维码,用户再用微信 &#x626B;&#x4E00;&#x626B;完成支付的模式。该模式适用…

    技术杂谈 2023年6月21日
    0101
  • AotucCrawler 快速爬取图片

    AotucCrawler 快速爬取图片 今天介绍一款自动化爬取图片项目。 GitHub: https://github.com/YoongiKim/AutoCrawler Goog…

    技术杂谈 2023年5月31日
    097
  • 导致ANR的几种情况

    KeyDispatchTimeout(5s): 按键或触摸事件在特定时间内无法处理完成 BroadcastTimeout(前台10s,后台60s): 广播在特定时间内无法处理完成 …

    技术杂谈 2023年5月31日
    088
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球