题解 | #删除有序链表中重复的元素-II#
删除有序链表中重复的元素-II
https://www.nowcoder.com/practice/71cef9f8b5564579bf7ed93fbe0b2024
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @return ListNode类
*/
#include <stdlib.h>
struct ListNode* deleteDuplicates(struct ListNode* head ) {
// write code here
struct ListNode* p1;
struct ListNode* p2;
struct ListNode* L =(struct ListNode*)malloc(sizeof(struct ListNode));//定义一个空节点
L->next = head;
p1 = head;
p2 = L;
while ( p1->next != NULL&& p1 !=NULL)//注意这里,不然会发生段错误
{
if (p1->val == p1->next->val) {
while (p1->next->val == p1->next->next->val&&p1->next->next !=NULL)//如果连续重复
{
p1 = p1->next;//不断遍历
}
if(p1->next == NULL)//遍历完都是空了,则提前返回
{
return L->next;
}
p1 = p1->next->next;//指向下下个节点
p2->next=p1;
}else {
p2 = p1;//保留前一个节点
p1 = p1->next;
}
}
return L->next;
}
