博客
关于我
牛客网算法——名企高频面试题143题(13)
阅读量:400 次
发布时间:2019-03-04

本文共 8503 字,大约阅读时间需要 28 分钟。

反转链表

package 复现代码;import org.junit.Test;/** * @Classname 反转链表II * @Description TODO * @Date 2020/12/21 12:56 * @Created by xjl */public class 反转链表II {    public class ListNode {        int val;        ListNode next;        public ListNode(int val) {            this.val = val;        }    }    public ListNode rever(ListNode head) {        if (head == null) {            return null;        }        ListNode pre = null;        ListNode curr = head;        while (curr != null) {            ListNode future = curr.next;            curr.next = pre;            pre = curr;            curr = future;        }        return pre;    }    public ListNode rever1(ListNode head) {        if (head == null) {            return null;        }        ListNode dumy = new ListNode(0);        dumy.next = head;        ListNode pre = dumy;        ListNode curr = head;        while (curr.next != null) {            ListNode future = curr.next;            curr.next = future.next;            future.next = dumy.next;            pre.next = future;        }        return dumy.next;    }    @Test    public void test() {        ListNode s1 = new ListNode(1);        ListNode s2 = new ListNode(2);        ListNode s3 = new ListNode(3);        ListNode s4 = new ListNode(4);        ListNode s5 = new ListNode(5);        s1.next = s2;        s2.next = s3;        s3.next = s4;        s4.next = s5;        ListNode res = rever1(s1);        while (res != null) {            System.out.print(res.val + " ");            res = res.next;        }    }}

链表判断时候有环

package 复现代码;/** * @Classname 判断链表时候有环 * @Description TODO * @Date 2020/12/21 14:38 * @Created by xjl */public class 判断链表时候有环 {    public class ListNode {        int val;        ListNode next;        public ListNode(int val) {            this.val = val;        }    }    public boolean cycle(ListNode head) {        if (head == null) {            return false;        }        ListNode fast = head;        ListNode slow = head;        while (fast != null && fast.next != null) {            fast=fast.next.next;            slow=slow.next;            if (fast==slow){                return true;            }        }        return false;    }}

链表判断环入口

package 复现代码;/** * @Classname 判断环的入口 * @Description TODO * @Date 2020/12/21 14:44 * @Created by xjl */public class 判断环的入口 {    public class ListNode {        int val;        ListNode next;        public ListNode(int val) {            this.val = val;        }    }    public ListNode test(ListNode head) {        if (head == null) {            return null;        }        ListNode fast = head;        ListNode slow = head;        while (fast != null && fast.next != null) {            fast = fast.next.next;            slow = slow.next;            if (slow == fast) {                //表示有环                ListNode start = head;                ListNode end = slow;                while (start != end) {                    start = start.next;                    end = end.next;                }                return start;            }        }        return null;    }}

合并链表

package 复现代码;/** * @Classname 合并链表 * @Description TODO * @Date 2020/12/21 14:53 * @Created by xjl */public class 合并链表 {    public class ListNode {        int val;        ListNode next;        public ListNode(int val) {            this.val = val;        }    }    /**     * @description TODO  链表的都是有序的     * @param: head1     * @param: head2     * @date: 2020/12/21 14:58     * @return: 复现代码.合并链表.ListNode     * @author: xjl    */    public ListNode merge(ListNode head1, ListNode head2) {        if (head1 == null && head2 != null) {            return head2;        }        if (head1 != null && head2 == null) {            return head1;        }        if (head1 == null && head2 == null) {            return null;        }        ListNode dumpy=new ListNode(0);        ListNode curr=dumpy;        ListNode curr1 = head1;        ListNode curr2 = head2;        while (curr1 != null && curr2 != null) {            if (curr1.val>=curr2.val){                curr.next=curr2;                curr2=curr2.next;            }else {                curr.next=curr1;                curr1=curr1.next;            }            curr=curr.next;        }        while (curr1!=null){            curr.next=curr1;            curr=curr.next;            curr1=curr.next;        }        while (curr2!=null){            curr.next=curr2;            curr=curr.next;            curr2=curr.next;        }        return dumpy.next;    }}

删除链表中的重复的元素I

package 复现代码;import org.junit.Test;/** * @Classname 删除链表的重复元素 * @Description TODO * @Date 2020/12/21 15:06 * @Created by xjl */public class 删除链表的重复元素 {    public class ListNode {        int val;        ListNode next;        public ListNode(int val) {            this.val = val;        }    }    public ListNode delete(ListNode head) {        if (head == null) {            return head;        }        ListNode curr = head;        while (curr.next != null) {            if (curr.val == curr.next.val) {                curr.next = curr.next.next;            } else {                curr = curr.next;            }        }        return head;    }    public ListNode de(ListNode head) {        if (head == null) {            return null;        }        ListNode curr = head;        while (curr != null && curr.next != null) {            ListNode future = curr.next;            if (future.val == curr.val) {                curr.next = future.next;            }else {                curr = curr.next;            }        }        return head;    }    @Test    public void test() {        ListNode s1 = new ListNode(1);        ListNode s2 = new ListNode(1);        ListNode s3 = new ListNode(2);        ListNode s4 = new ListNode(3);        ListNode s5 = new ListNode(3);        s1.next = s2;        s2.next = s3;        s3.next = s4;        s4.next = s5;        ListNode res = delete(s1);        while (res != null) {            System.out.print(res.val + " ");            res = res.next;        }    }}

删除链表中的重复的元素II

package 名企高频面试题143;import org.junit.Test;/** * @Classname 链表删除所有重复元素 * @Description TODO * @Date 2020/12/18 10:03 * @Created by xjl */public class 链表删除所有重复元素 {    /**     * @description TODO 删除的是的链表的重复的元素     * @param: head     * @date: 2020/12/18 10:04     * @return: ListNode     * @author: xjl     */    public ListNode deleteDuplicates(ListNode head) {        if (head == null){            return null;        }        ListNode dumy = new ListNode(0);        dumy.next = head;        ListNode pre = dumy;        ListNode curr = head;        while (curr != null && curr.next != null) {            ListNode future = curr.next;            if (future.val != curr.val) {                pre = pre.next;                curr = curr.next;            } else {                while (future != null && future.val == curr.val) {                    future = future.next;                }                pre.next = future;                curr = future;            }        }        return dumy.next;    }    public ListNode deleteDuplicates2(ListNode head) {        ListNode dummy = new ListNode(-1);        dummy.next = head;        ListNode prev = dummy;        ListNode curr = head;        while (curr != null && curr.next != null) {            if (curr.val == curr.next.val) {                ListNode future = curr.next;                while (future != null && future.val == curr.val) {                    future = future.next;                }                prev.next = future;                curr = future;            } else {                prev = prev.next;                curr = curr.next;            }        }        return dummy.next;    }    @Test    public void test() {        ListNode node1 = new ListNode(1);        ListNode node2 = new ListNode(1);        ListNode node3 = new ListNode(1);        ListNode node4 = new ListNode(1);        ListNode node5 = new ListNode(1);        ListNode node6 = new ListNode(4);        ListNode node7 = new ListNode(5);        ListNode node8 = new ListNode(6);        node1.next = node2;        node2.next = node3;//        node3.next = node4;//        node4.next = node5;//        node5.next = node6;//        node6.next = node7;//        node7.next = node8;        ListNode res = deleteDuplicates(node1);        while (res != null) {            System.out.print(res.val + " ");            res = res.next;        }    }    public class ListNode {        int val;        ListNode next;        public ListNode(int val) {            this.val = val;        }    }}

 

转载地址:http://wqch.baihongyu.com/

你可能感兴趣的文章
Node-RED中使用JSON数据建立web网站
查看>>
Node-RED中使用json节点解析JSON数据
查看>>
Node-RED中使用node-random节点来实现随机数在折线图中显示
查看>>
Node-RED中使用node-red-browser-utils节点实现选择Windows操作系统中的文件并实现图片预览
查看>>
Node-RED中使用node-red-contrib-image-output节点实现图片预览
查看>>
Node-RED中使用node-red-node-ui-iframe节点实现内嵌iframe访问其他网站的效果
查看>>
Node-RED中使用Notification元件显示警告讯息框(温度过高提示)
查看>>
Node-RED中使用range范围节点实现从一个范围对应至另一个范围
查看>>
Node-RED中实现HTML表单提交和获取提交的内容
查看>>
Vue3+elementplus实现图片上传下载(最强实践)
查看>>
Node-RED中将CSV数据写入txt文件并从文件中读取解析数据
查看>>
Node-RED中建立TCP服务端和客户端
查看>>
Node-RED中建立Websocket客户端连接
查看>>
Node-RED中建立静态网页和动态网页内容
查看>>
Vue3+Element-ul学生管理系统(第二十二课)
查看>>
Node-RED中怎样让网站返回JSON数据
查看>>
Node-RED中根据HTML文件建立Web网站
查看>>
Node-RED中解析高德地图天气api的json数据显示天气仪表盘
查看>>
Node-RED中连接Mysql数据库并实现增删改查的操作
查看>>
Node-RED中通过node-red-ui-webcam节点实现访问摄像头并截取照片预览
查看>>