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;
}
}