用C语言数据结构写单链表删除绝对值相同的点的程序代码
时间: 2024-09-18 22:18:16 浏览: 59
在C语言中,我们可以使用指针来操作链表,并编写一个函数来删除所有绝对值相等的节点。这里是一个简单的示例,假设链表节点包含一个整数值和指向下一个节点的指针:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct ListNode {
int val; // 节点值
struct ListNode* next; // 指向下一个节点的指针
} ListNode;
// 创建新节点
ListNode* createNode(int val) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->val = val;
newNode->next = NULL;
return newNode;
}
// 删除绝对值相同的节点
void deleteDuplicates(ListNode** head) {
if (*head == NULL) {
return;
}
ListNode* current = *head;
while (current != NULL) {
ListNode* nextTemp = current->next;
if (nextTemp != NULL && abs(current->val) == abs(nextTemp->val)) {
ListNode* temp = nextTemp;
while (temp != NULL && abs(temp->val) == abs(current->val)) { // 找到第一个不同绝对值的节点
nextTemp = temp->next;
free(temp); // 释放当前节点内存
temp = nextTemp;
}
current->next = nextTemp; // 更新当前节点的next指针
} else {
current = nextTemp;
}
}
}
// 打印链表
void printList(ListNode* node) {
while (node != NULL) {
printf("%d ", node->val);
node = node->next;
}
printf("\n");
}
int main() {
// 创建一个链表,例如:1, -2, 3, 2, 4, -2
ListNode* list = createNode(1);
list->next = createNode(-2);
list->next->next = createNode(3);
list->next->next->next = createNode(2);
list->next->next->next->next = createNode(4);
list->next->next->next->next->next = createNode(-2);
printf("Original List: ");
printList(list);
deleteDuplicates(&list);
printf("List after deleting duplicates: ");
printList(list);
return 0;
}
```
这个程序首先创建了一个链表,然后通过`deleteDuplicates`函数遍历链表,删除绝对值相同的节点。注意,这只是一个简化版本,实际应用中还需要考虑边界条件和内存管理。
阅读全文