这段代码定义了一个链表的结构体,并实现了初始化节点和删除节点的函数。
首先,结构体定义如下:
typedef struct Node {
int data;
struct Node *next;
} node;
接着是初始化节点的函数Init_Node,它接受一个指向头节点的指针作为参数,并返回头节点指针。在函数内部,通过动态内存分配创建了头节点 head,并将其 next 指针设置为 NULL。然后根据输入的数字数量循环创建新的节点,并将数据添加到链表中:
node* Init_Node(node *N) {
node *head, *p;
head = (node*)malloc(sizeof(node));
head->next = NULL;
int n;
printf("Please enter how many numbers you want to enter: ");
scanf("%d", &n);
while (n--) {
p = (node*)malloc(sizeof(node));
scanf("%d", &p->data);
p->next = head->next;
head->next = p;
}
return head;
}
最后是删除重复节点的函数 Detele_Node,它接受一个指向链表头节点的指针作为参数。遍历链表,在找到连续重复值时删除重复节点:
void Detele_Node(node *N) {
node* p = N;
while (p -> next != NULL) {
if (p -> data == p -> next -> data) {
node *h = p -> next;
p -> next = p -> next -> next;
free(h);
} else {
p = p -> next;
}
}
}
请注意,上述代码可能需要进一步的调试和完善,例如对于输入合法性的检查、内存释放等。
内容由零声教学AI助手提供,问题来源于学员提问




