题目:Given a sorted linked list, delete all duplicates such that each element appear only once.
For example,
Given1->1->2
, return 1->2
. Given 1->1->2->3->3
, return 1->2->3
. 题目解答:使用三个指针,p标明已经处理好的链表部分;q用来指代当前待比较的节点;r用来依次遍历是否有重复的元素。
同样使用虚拟头结点,来避免过多的判断。
代码如下:
/**
* 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) { ListNode * Head = new ListNode(-1); Head -> next = head; ListNode *p = Head; ListNode *q = p -> next; while(q != NULL) { ListNode *r = q -> next; while( (r != NULL) && (r -> val == q -> val) ) { ListNode *tmp = r -> next; delete r; r = tmp; } q -> next = r; p -> next = q; p = q; q = q -> next; } ListNode *tmp = Head -> next; delete Head; return tmp; }};