写在前面
最近想复习一下数据结构与算法相关的内容,找一些题来做一做。如有更好思路,欢迎指正。
目录
- 写在前面
- 一、场景描述
- 二、具体步骤
- 1.环境说明
- 2.代码
- 写在后面
一、场景描述
删除有序
链表中的重复元素。
示例:
输入:1->2->3->3->5
输出:1->2->3->5
二、具体步骤
1.环境说明
名称 | 说明 |
---|---|
IntelliJ IDEA | 2019.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;}}}
}
写在后面
如果本文内容对您有价值或者有启发的话,欢迎点赞、关注、评论和转发。您的反馈和陪伴将促进我们共同进步和成长。