[LeetCode] #83 删除排序链表中的重复元素
存在一个按升序排列的链表,给你这个链表的头节点 head
,请你删除所有重复的元素,使每个元素 只出现一次 。返回同样按升序排列的结果链表。
输入:head = [1,1,2]
输出:[1,2]
首先,创建辅助指针。遍历链表,比较相邻val。若相等,删除,指针不动。若不等,指针后移。
类似题目:[LeetCode] #26 删除有序数组中的重复项
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ class Solution { public ListNode deleteDuplicates(ListNode head) { if(head==null || head.next==null){ return head; } ListNode p = head; while(p.next!=null){ if(p.next.val==p.val){ p.next = p.next.next; }else{ p = p.next; } } return head; } }
递归写法(评论区一位老哥)
如果独立写递归函数有困难的,可以参考一下我写的一个博客,附有详细的图文介绍:博客链接
class Solution { public ListNode deleteDuplicates(ListNode head) { if(head == null || head.next == null){ return head; } head.next = deleteDuplicates(head.next); if(head.val == head.next.val) head = head.next; return head; } }
知识点:无
总结:
解递归题的三部曲
(1)找整个递归的终止条件:递归应该在什么时候结束?
(2)找返回值:应该给上一级返回什么信息?
(3)本级递归应该做什么:在这一级递归中,应该完成什么任务?