单链表的realloc代码
时间: 2024-04-14 12:21:25 浏览: 66
单链表代码
好的,以下是单链表的realloc代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node;
Node *createList(int n) {
Node *head = NULL, *tail = NULL;
for (int i = 0; i < n; i++) {
Node *node = (Node *)malloc(sizeof(Node));
node->data = i + 1;
node->next = NULL;
if (head == NULL) {
head = tail = node;
} else {
tail->next = node;
tail = node;
}
}
return head;
}
void printList(Node *head) {
for (Node *p = head; p != NULL; p = p->next) {
printf("%d ", p->data);
}
printf("\n");
}
Node *reallocList(Node *head, int n) {
if (n <= 0) {
return NULL;
}
Node *p = head, *q = NULL;
int len = 0;
while (p != NULL) {
len++;
if (len == n) {
q = p;
}
p = p->next;
}
if (q == NULL) {
return head;
}
Node *newHead = q->next;
q->next = NULL;
return newHead;
}
int main() {
Node *head = createList(5);
printf("Original list: ");
printList(head);
head = reallocList(head, 3);
printf("New list: ");
printList(head);
return 0;
}
```
这个示例中,我们定义了一个 `Node` 结构体表示链表节点,其中包含一个整数 `data` 和一个指向下一个节点的指针 `next`。我们还定义了三个函数:
- `createList`:创建一个包含 `n` 个节点的链表,并返回链表头节点的指针。
- `printList`:打印链表中所有节点的数据。
- `reallocList`:将链表截断为前 `n` 个节点,并返回新的链表头节点的指针。
在 `reallocList` 函数中,我们首先遍历整个链表,找到第 `n` 个节点的前一个节点 `q`。如果 `n` 大于链表长度,或者等于或小于零,那么直接返回原链表头节点的指针。否则,我们将第 `n` 个节点的后继节点作为新链表的头节点,并将第 `n` 个节点的指针域设为 NULL,从而截断原链表。最后,返回新链表的头节点的指针。
阅读全文