用c语言写出一段正确简单易懂的详细代码实现以单链表作为存储结构,将线性表扩展到2倍,假设线性表为(a1,a2,…,an),扩展后为(a1,a1,a2,a2,…,an,an)
时间: 2024-10-11 19:09:44 浏览: 23
线性表顺序存储C语言实现
当然可以。下面是一个简单的C语言代码示例,用于将给定的单链表扩展到两倍长度:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建新节点
Node* create_node(int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("Memory allocation failed.\n");
return NULL;
}
newNode->data = value;
newNode->next = NULL;
return newNode;
}
// 扩展链表函数
void extend_linked_list(Node** head, int n) {
Node* current = *head;
while (current != NULL) {
// 先复制当前节点
Node* new_node = create_node(current->data);
if (new_node == NULL) {
return; // 如果复制失败,直接返回
}
// 连接复制后的节点
new_node->next = current->next;
current->next = new_node;
// 移动指针到下一个原始节点
current = current->next;
}
}
// 打印链表
void print_list(Node* head) {
Node* temp = head;
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
}
int main() {
// 示例链表:1 -> 2 -> 3 -> NULL
Node* original_head = create_node(1);
original_head->next = create_node(2);
original_head->next->next = create_node(3);
int n = 3; // 原始链表长度
printf("Original list:\n");
print_list(original_head);
extend_linked_list(&original_head, n);
printf("\nExtended list after duplication:\n");
print_list(original_head);
return 0;
}
```
这个程序首先创建了一个包含三个元素(1, 2, 3)的简单单链表。`extend_linked_list`函数遍历原链表,为每个节点创建一个新的副本,并连接它们,形成新的链表。最后打印出扩展后的链表。
阅读全文