#include<stdio.h> #include<stdlib.h> typedef struct Node { int data; struct Node *next; }Node; int strlen(Node *p,int k) { int i,j; while(p!=NULL) { p=p->next; i++; } j=i-k; return j; } Node * fun(Node *h, int x, int k) { Node * p; Node * h1=h; int i; p=(Node*)malloc(sizeof(Node)); p->data=x; p->next=NULL; strlen(h,k); for(i=0;i<k-1;h1=h1->next) ; p->next=h1->next; h1=p; return h1; } void print(Node * p) { for(;p!=NULL;p=p->next) ; printf("%d\n",p->data); } int main(void) { Node * h1=NULL; Node n1,n2,n3,n4; n1.data=10; n2.data=20; n3.data=5; n4.data=15; h1=&n1; n1.next=&n2; n2.next=&n3; n3.next=&n4; n4.next=NULL; fun(h1, 12,2); print(h1); return 0; }为什么报错
时间: 2024-03-29 20:37:22 浏览: 75
在代码中,有一个函数 `strlen`,但是这个函数与 C 标准库中的同名函数重名了,导致编译器无法识别。建议更改函数名,或者将该函数内部使用的变量 `i` 初始化为0。此外,`fun` 函数中的循环也有问题,应该将 `i` 的初始值设为1,每次循环 `i` 都要加1。最后,`fun` 函数中的 `h1=p;` 应该改为 `h1=p->next;`。
相关问题
简化#include<stdio.h> #include<stdlib.h> //定义数据类型,假设为int typedef int ElemType; //定义自引用结构体(结点) struct node { ElemType data; struct node *next; }; //typedef为了简写struct node typedef struct node Node; /** * 链表各种函数的声明 */ //创建链表函数声明 Node *CreatList(); /
下面是简化后的代码:
```
typedef int ElemType;
typedef struct node {
ElemType data;
struct node *next;
} Node;
Node *CreatList();
```
完善以下代码:#include <stdio.h> #include <stdlib.h> typedef struct node { void *data; struct node *next; }NODE; NODE * find_circular_of_list(NODE *head) { }
以下是完善后的代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
void *data;
struct node *next;
} NODE;
NODE* find_circular_of_list(NODE* head) {
if (head == NULL) { // 链表为空,无法找到环
return NULL;
}
NODE* fast = head;
NODE* slow = head;
while (fast != NULL && fast->next != NULL) { // 快慢指针找到相遇点
fast = fast->next->next;
slow = slow->next;
if (fast == slow) {
break;
}
}
if (fast == NULL || fast->next == NULL) { // 没有环
return NULL;
}
NODE* ptr1 = head;
NODE* ptr2 = fast;
while (ptr1 != ptr2) { // 从头指针和相遇点指针同时出发,相遇点即为环的入口
ptr1 = ptr1->next;
ptr2 = ptr2->next;
}
return ptr1;
}
```
这个函数的目的是在给定的链表中查找环的入口节点。如果链表不包含环,则返回 `NULL`。在实现中,我们使用了快慢指针的技巧。快指针每次移动两步,慢指针每次移动一步,如果链表中存在环,则二者最终会在环上相遇。接着,我们让两个指针同时从头节点和相遇节点出发,每次移动一个节点,当它们再次相遇时,就是环的入口节点。
阅读全文