因为链表本身有序,所以可以从第二个结点看到最后一个结点,如果这个结点和前一个结点相同,就删掉这个结点。
因为给出的链表是单链表,所以前一个结点需要我们自己记录一下。
c++
class Solution { public: ListNode* deleteDuplicates(ListNode* head) { // write code here if(head == NULL){return head;} ListNode* now = head->next; ListNode* pre = head; ListNode* next = NULL; while(now!=NULL) { next = now->next; if(now->val == pre->val)//相等,删除这个结点。注意这时pre不用更新。 { pre->next = next; delete now; now = next; } else{ pre = now; now = next; } } return head; } };
java
import java.util.*; public class Solution { public ListNode deleteDuplicates (ListNode head) { if(head == null){return head;} ListNode now = head.next; ListNode pre = head; ListNode next = null; while(now!=null) { next = now.next; if(now.val == pre.val)//相等,删除这个结点。注意这时pre不用更新。 { pre.next = next; now = next; } else{ pre = now; now = next; } } return head; } }
python
class Solution: def deleteDuplicates(self , head ): # write code here if head == None: return head now = head.next pre = head Next = None while now!=None: Next = now.next if now.val == pre.val: #相等,删除这个结点。注意这时pre不用更新。 pre.next = Next now = Next else: pre = now now = Next return head;