主页 > 创业  > 

【链表】-Lc83-删除有序链表中的重复元素(快慢双指针,slow,fast)


写在前面

  最近想复习一下数据结构与算法相关的内容,找一些题来做一做。如有更好思路,欢迎指正。


目录 写在前面一、场景描述二、具体步骤1.环境说明2.代码 写在后面


一、场景描述

  删除有序链表中的重复元素。

示例: 输入:1->2->3->3->5 输出:1->2->3->5
二、具体步骤 1.环境说明 名称说明IntelliJ IDEA2019.2 2.代码

以下为Java版本实现:

public class Lc83_deleteDuplicates { public static void main(String[] args) { ListNode n5 = new ListNode(5); ListNode n31 = new ListNode(3, n5); ListNode n3 = new ListNode(3, n31); ListNode n2 = new ListNode(2, n3); ListNode head = new ListNode(1, n2); ListNode.print(head); System.out.println(); ListNode.print(deleteDuplicates(head)); } /** * 约束条件:有序链表 * 返回值:链表 * * 注意条件判断 * * 思路: * 有序链表,那么重复的值就会紧挨着 * * 使用快慢双指针, * 如果值相等,fast就往后去找不相等的值 * 当值不相等时,就把 fast 的值给 slow.next,然后2个指针同时向后移动 * * 循环结束,慢指针和后面的节点断开 * * 定义 slow = head, fast = head.next * while循环 * if (fast != null) slow.next = fast; slow = slow.next * fast = fast.next * * slow.next = null * * @param head * @return */ private static ListNode deleteDuplicates(ListNode head) { if (head == null) { return null; } if (head.next == null) { return head; } ListNode slow = head, fast = head.next; while (fast != null) { if (slow.val != fast.val) { slow.next = fast; slow = slow.next; } fast = fast.next; } slow.next = null; return head; } static class ListNode { int val; ListNode next; public ListNode() { } public ListNode(int val) { this.val = val; } public ListNode(int val, ListNode next) { this.val = val; this.next = next; } public static void print(ListNode head) { while (head != null) { if (head.next == null) { System.out.print(head.val); } else { System.out.print(head.val + ", "); } head = head.next; } } } }
写在后面

  如果本文内容对您有价值或者有启发的话,欢迎点赞、关注、评论和转发。您的反馈和陪伴将促进我们共同进步和成长。

标签:

【链表】-Lc83-删除有序链表中的重复元素(快慢双指针,slow,fast)由讯客互联创业栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【链表】-Lc83-删除有序链表中的重复元素(快慢双指针,slow,fast)