c语言实现删除链表重复项代码
时间: 2024-05-16 08:12:02 浏览: 14
当然可以!这里是 C 语言实现删除链表重复项代码的示例:
```c
struct ListNode* deleteDuplicates(struct ListNode* head){
struct ListNode* curr = head;
while(curr != NULL && curr->next != NULL){
if(curr->val == curr->next->val){
struct ListNode* temp = curr->next;
curr->next = temp->next;
free(temp);
} else {
curr = curr->next;
}
}
return head;
}
```
希望这个示例对你有所帮助!
相关问题
用C语言写代码实现删除链表中的重复
节点
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int value;
struct Node *next;
} Node;
void printList(Node *head) {
Node *current = head;
while (current != NULL) {
printf("%d ", current->value);
current = current->next;
}
printf("\n");
}
void deleteDuplicates(Node *head) {
Node *current = head;
while (current != NULL) {
Node *runner = current;
while (runner->next != NULL) {
if (runner->next->value == current->value) {
Node *temp = runner->next;
runner->next = runner->next->next;
free(temp);
} else {
runner = runner->next;
}
}
current = current->next;
}
}
int main() {
Node *head = (Node *)malloc(sizeof(Node));
head->value = 1;
Node *node1 = (Node *)malloc(sizeof(Node));
node1->value = 2;
Node *node2 = (Node *)malloc(sizeof(Node));
node2->value = 3;
Node *node3 = (Node *)malloc(sizeof(Node));
node3->value = 2;
Node *node4 = (Node *)malloc(sizeof(Node));
node4->value = 4;
Node *node5 = (Node *)malloc(sizeof(Node));
node5->value = 3;
Node *node6 = (Node *)malloc(sizeof(Node));
node6->value = 5;
head->next = node1;
node1->next = node2;
node2->next = node3;
node3->next = node4;
node4->next = node5;
node5->next = node6;
node6->next = NULL;
printf("Original list:\n");
printList(head);
deleteDuplicates(head);
printf("List after deleting duplicates:\n");
printList(head);
return 0;
}
```
输出结果:
```
Original list:
1 2 3 2 4 3 5
List after deleting duplicates:
1 2 3 4 5
```
c语言删除链表中的重复元素
在C语言中,可以通过遍历链表的方式删除链表中的重复元素。具体步骤如下:
1. 定义两个指针p和q,分别指向链表的头结点和下一个节点。
2. 在p不为空时,循环遍历链表,将q指向p的下一个节点。
3. 在q不为空时,比较p和q所指向的节点的值是否相同,若相同,则删除q所指向的节点,并将q指向下一个节点。
4. 若不同,则将p和q同时向后移动一位。
5. 重复执行步骤2-4,直到遍历完整个链表。
具体代码如下:
```
struct ListNode* deleteDuplicates(struct ListNode* head) {
struct ListNode *p = head, *q;
while (p != NULL) {
q = p->next;
while (q != NULL) {
if (p->val == q->val) {
p->next = q->next;
free(q);
q = p->next;
} else {
q = q->next;
}
}
p = p->next;
}
return head;
}
```