【发布时间】:2019-08-17 18:22:36
【问题描述】:
我试图使用递归概念删除排序链表中的重复元素。
我想看看如何删除排序链表中的元素。我编写了一个代码,其中如果head->data == head->next->data 比head->next 应该被释放,直到我们得到不同的元素。
现在我做了很多改变,我很困惑我应该怎么做。它正在删除每个重复的值,只留下只出现在整个代码中的那个。
还请告诉我为什么这段代码会这样做,以及代码会出现什么问题,以及是否有任何最佳方式可以做同样的事情。
(我只提供deleteduplicate函数,如果需要提供整个代码,比如打印列表或插入到列表中,如果被告知我会编辑它)。
谢谢。
Node *deleteDuplicates(Node *head) {
if (head == NULL || head->next == NULL) {
return head;
}
if (head->data == head->next->data) {
struct Node *x = head->next;
head->next = head->next->next;
free(x);
return deleteDuplicates(head);
} else
return deleteDuplicates(head->next);
}
输入:11 11 11 13 13 20
输出:20
预期输出:11 13 20
【问题讨论】:
标签: c recursion linked-list