leetcode_83
题目描述
Given a sorted linked list, delete all duplicates such that each element appear only once.
Example 1:
Input: 1->1->2 Output: 1->2 Example 2:Input: 1->1->2->3->3 Output: 1->2->3
思路:
就是一个单纯的定义两个指针分别为p和q,指针q作为标记p的下一个节点,如果p的下一个节点和它相等,将p的指针指向p的下一个的下一个节点,free掉q
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* deleteDuplicates(struct ListNode* head) {
struct ListNode *p = head, *q;
while(p && p->next) {
q = p->next;
if(p->val == p->next->val) {
p->next = q->next;
free(q);
} else p = p->next;
//一定要写上else,否则假如有三个一样的数字【eg:111】时,最后一个不会被判断
}
return head;
}