leet-code-第83题(简单) 删除排序链表中的重复元素

题目描述:

存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。

返回同样按升序排列的结果链表。

 

 

结题思路:

设置单指针,判断当前指向节点的值与其后继指向的节点值是否相同,若相同,则跳过下一节点,将当前指针的后继设置为当前下一节点的后继

需要注意处理输入为空的特殊情况,直接返回null

 1 /**
 2  * Definition for singly-linked list.
 3  * public class ListNode {
 4  *     int val;
 5  *     ListNode next;
 6  *     ListNode() {}
 7  *     ListNode(int val) { this.val = val; }
 8  *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 9  * }
10  */
11 class Solution {
12     public ListNode deleteDuplicates(ListNode head) {
13             //基本思路:设置单指针,从头开始遍历,下一节点的值与当前节点相同时
14             //直接跳过下一节点,将当前节点的后继指向下一节点的后继
15         ListNode pointer = new ListNode();
16         pointer = head;
17         if(head == null){
18             return null;
19         }
20         while(pointer.next != null){
21             if(pointer.val == pointer.next.val){
22                 pointer.next = pointer.next.next;
23             }else{
24                 pointer = pointer.next;
25             }
26         }
27         return head;
28     }
29 }

来源:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list/

 

/**
 * 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) {
            //基本思路:设置单指针,从头开始遍历,下一节点的值与当前节点相同时
            //直接跳过下一节点,将当前节点的后继指向下一节点的后继
        ListNode curr = new ListNode();
        curr = head;
        if(head == null){
            return null;
        }
        while(curr.next != null){
            if(curr.val == curr.next.val){
                curr.next = curr.next.next;
            }else{
                curr = curr.next;
            }
        }
        return head;
    }
}
posted @ 2021-04-01 17:04  charler。  阅读(66)  评论(0)    收藏  举报