/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* deleteDuplicates(struct ListNode* head){
struct ListNode* current=head;
while(current->next){
if(current->val=current->next->val){
current->next=current->next->next;
free(current->next);
}
else{
current=current->next;
}
}
return current->next;
}
供参考:
#include <stdio.h>
#include <stdlib.h>
struct ListNode {
int val;
struct ListNode* next;
};
struct ListNode* RemoveDuplicates(struct ListNode* head)
{
struct ListNode* p = head->next, * preq, * q;
while (p != NULL)
{
preq = p;
q = p->next;
while (q) {
if (q->val == p->val) {
preq->next = q->next;
free(q);
q = preq->next;
}
else {
preq = q;
q = q->next;
}
}
p = p->next;
}
return head;
}
利用双重循环吧
https://blog.csdn.net/Fizz6018/article/details/106816783/
【以下回答由 GPT 生成】
对于上述代码的优化,主要包括以下几个方面:
下面是优化后的代码:
struct ListNode* deleteDuplicates(struct ListNode* head){
// 处理特殊情况
if(head == NULL || head->next == NULL){
return head;
}
struct ListNode* current = head;
// 循环遍历链表
while(current->next){
// 如果有重复节点
if(current->val == current->next->val){
struct ListNode* temp = current->next;
current->next = current->next->next;
free(temp);
}
else{
current = current->next;
}
}
return head;
}
请注意,这里假设原始链表是有序的,如果链表无序,则需要先对链表进行排序再进行删除重复节点的操作。
【相关推荐】