思路:因为链表有序,将当前节点与下一节点进行比较,若两节点值相同,则删除后一节点,一直到两节点值不同,此时将指针指向后一节点,再重复上述操作,直到结束。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head)
{
if(head == NULL)
return head;
ListNode* cur{ head };
while (cur->next != NULL)
{
if (cur->val == cur->next->val)
{
ListNode* c = cur->next;
cur->next = c->next;
delete c;
}
else
{
cur = cur->next;
}
}
return head;
}
};
/**
* Definition for singly-linked list.
* public class ListNode {
* public int val;
* public ListNode next;
* public ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode DeleteDuplicates(ListNode head)
{
if(head == null)
return null;
if(head.next == null)
return head;
ListNode i = head;
ListNode j = head.next;
while(j != null)
{
if(i.val != j.val)
{
i.next = j;
i = i.next;
}
j = j.next;
}
i.next = null;
return head;
}
}