题解 | #删除链表中重复的结点#
删除链表中重复的结点
https://www.nowcoder.com/practice/fc533c45b73a41b0b44ccba763f866ef
利用双指针解题,再创建一个空节点,让他的next指向pHead。
slow指针和fast指针之间相差一,比较fast的val和它下一个节点的val值是否相等,相等则让fast指向下一个节点再比较值,直到不相同的节点
这时候让slow的next指向fast
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pHead ListNode类
* @return ListNode类
*/
struct ListNode* deleteDuplication(struct ListNode* pHead ) {
// write code here
struct ListNode *p,*fast,*slow;
p = (struct ListNode*)malloc(sizeof(struct ListNode));
p -> next = pHead;
fast = pHead;
slow = p;
while(fast && fast -> next){
bool flag = false;
while(fast -> next && fast -> val == fast -> next -> val){
fast = fast -> next;
flag = true;
}
if(flag){
fast = fast -> next;
slow -> next = fast;
}else{
fast = fast -> next;
slow = slow -> next;
}
}
return p -> next;
}
查看11道真题和解析