题目分析:
- 从有序的链表中,去除重复数,得到最后的链表,链表中每个元素最多出现一次。
解题思路:
快慢指针实现
定义两个指针,一个快指针,一个慢指针,一遍遍历链表;
判断快指针和慢指针中存放的值是否相等,相等则跳过快指针,且快指针向前移动;不相等则同时移动快慢指针即可。
实现程序
ListNode * deleteDuplicates(ListNode *head) { // 空链表或只有一个元素链表 if (head == NULL || head->next == NULL) return head; // 慢指针 struct ListNode *q = head; // 快指针 struct ListNode *p = head->next; // 一遍遍历 while (p != NULL) { if (q->val == p->val) { // 跳过快指针 q->next = p->next; // 快指针前移 p = p->next; } else { // 两个指针同时前移 p = p->next; q = q->next; } } // 返回链表头结点 return head; }