[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)本级递归应该做什么:在这一级递归中,应该完成什么任务?

posted @ 2021-07-31 14:14  1243741754  阅读(33)  评论(0编辑  收藏  举报