//(链表)先建立有序(从小到大)带有头节点的单向链表,再删除一个节点,并将链表输出。 #include "stdlib.h" #include "stdio.h" #define N 10 typedef struct list { int data; struct list *next; }NODE; NODE *creat_list(int *a,int n) { } delNode(NODE *head,int x) { } print(NODE *h) //打印链表内容 { NODE *p; p=h->next; while(p!=NULL) { printf("%d ",p->data); p=p->next; } printf("\n"); } int main() { int i,j,x,a[N]={1,13,25,37,9,911,133,415,147,19}; NODE *head; head=creat_list(a,10); scanf("%d",&x); delNode(head,x); print(head); }
时间: 2024-03-14 10:48:38 浏览: 48
好的,我会根据您提供的代码解答您的问题。这是一个链表的创建、删除和打印程序。
首先,我们来看链表的创建函数 `creat_list`。该函数的作用是创建一个有序(从小到大)带头节点的单向链表,并将数组 `a` 中的元素插入到链表中。函数的参数包括数组 `a` 和数组长度 `n`,返回值为链表的头节点。
链表的节点类型为 `NODE`,包括数据域 `data` 和指向下一个节点的指针域 `next`。因此,我们可以通过循环遍历数组 `a`,创建并插入每个节点,最后返回链表的头节点。
下面是 `creat_list` 函数的代码实现:
```
NODE *creat_list(int *a, int n)
{
NODE *head, *p, *q;
head = (NODE *)malloc(sizeof(NODE)); // 创建头节点
head->next = NULL; // 头节点的指针域初始化为 NULL
q = head; // q 指向当前节点的前一个节点,初始值为头节点
for (int i = 0; i < n; i++) {
p = (NODE *)malloc(sizeof(NODE)); // 创建新节点
p->data = a[i]; // 赋值
p->next = NULL; // 新节点的指针域初始化为 NULL
while (q->next != NULL && q->next->data < a[i]) {
q = q->next; // 找到插入位置
}
p->next = q->next; // 插入新节点
q->next = p;
q = head; // q 指向头节点,准备插入下一个节点
}
return head;
}
```
接下来是删除节点的函数 `delNode`。该函数的作用是删除链表中第一个数据域为 `x` 的节点,并将链表重新连接。函数的参数包括链表的头节点 `head` 和要删除的节点的数据域 `x`。
我们可以通过遍历链表,找到数据域为 `x` 的节点,并将该节点从链表中删除。具体操作是,使用指针 `p` 遍历链表,当 `p` 指向的节点的数据域等于 `x` 时,将该节点从链表中删除,即将其前一个节点的指针域指向其后一个节点,然后释放该节点的内存。
下面是 `delNode` 函数的代码实现:
```
void delNode(NODE *head, int x)
{
NODE *p, *q;
p = head->next; // p 指向第一个节点
q = head; // q 指向当前节点的前一个节点,初始值为头节点
while (p != NULL) {
if (p->data == x) { // 找到要删除的节点
q->next = p->next; // 删除节点
free(p); // 释放内存
return;
}
q = p; // q 指向当前节点
p = p->next; // p 指向下一个节点
}
}
```
最后是打印链表的函数 `print`。该函数的作用是遍历链表,并依次输出每个节点的数据域。函数的参数为链表的头节点 `h`。
我们可以使用指针 `p` 遍历链表,依次输出每个节点的数据域。具体操作是,使用 `while` 循环遍历链表,当 `p` 指向的节点不为 `NULL` 时,输出该节点的数据域,然后将 `p` 指向下一个节点。最后输出一个换行符。
下面是 `print` 函数的代码实现:
```
void print(NODE *h)
{
NODE *p;
p = h->next; // p 指向第一个节点
while (p != NULL) {
printf("%d ", p->data); // 输出数据域
p = p->next; // p 指向下一个节点
}
printf("\n"); // 输出一个换行符
}
```
完整代码如下:
阅读全文