题解 | #删除有序链表中重复的元素-I#
删除有序链表中重复的元素-I
https://www.nowcoder.com/practice/c087914fae584da886a0091e877f2c79
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
/**
*
* @param head ListNode类
* @return ListNode类
*/
ListNode* deleteDuplicates(ListNode* head) {
// 注意快慢指针相当于结点的前一个结点,所以有好多next
if(!head) return NULL; // 如果链表为空,直接返回NULL
ListNode* slow = new ListNode(-1); // 创建慢指针链表头结点
slow->next = head;
ListNode* fast = new ListNode(-1); // 创建快指针链表头结点
fast->next = head;
ListNode* result = slow; // 创建返回结果的结点
while(fast->next){ // 利用快指针链表头结点遍历链表
if(fast->next->val == slow->next->val){ // 如果快慢指针的下一个结点的值相等,快指针后移
fast = fast->next;
} else { // 如果快慢指针的下一个结点的值不相等
slow->next->next = fast->next; // 将慢指针的下一个结点的下一个结点替换成快指针的下一个结点
slow = slow->next; // 更新慢指针
fast = fast->next; // 更新快指针
}
}
if(slow->next->next) slow->next->next = NULL; // 如果慢指针的下一个节点的下一个结点不为空,说明最后几个节点都是相同的
return result->next;
}
};


阿里云成长空间 745人发布