c语言程序设计 设单链表以非递减有序排序,设计算法实现在单链表中删去值相同的多余结点。
时间: 2024-10-16 20:22:29 浏览: 36
要实现删除已排序单链表中的重复元素,可以参考以下C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode {
int data;
struct LNode* next;
} LNode, *LinkList;
void deleteDuplicatesSorted(LinkList& L) {
LNode* p = L;
while (p != NULL) {
LNode* q = p->next;
while (q != NULL && p->data == q->data) { // 如果当前节点与下一个节点数值相同
LNode* temp = q; // 创建临时指针保存重复节点
q = q->next; // 移动q到下一个不同值的节点
free(temp); // 释放重复节点的空间
}
p = q; // 更新p指向下一个不同值的节点
}
}
int main() {
LinkList L = (LinkList)malloc(sizeof(LNode)); // 初始化链表
// ... 填充已排序的链表 ...
deleteDuplicatesSorted(L); // 删除重复节点
// ... 链表遍历并打印 ...
return 0;
}
```
这个算法通过双指针`p`和`q`遍历链表。当发现`p`指向的节点与`q`指向的节点值相等时,它会移动`q`并释放重复的节点。这样就可以保持链表的顺序,只保留每个唯一值。
阅读全文