用c语言写出一段正确简单易懂的详细代码实现以单链表作为存储结构,将线性表扩展2倍,假设线性表为(a1,a2,…,an),扩展后为(a1,a1,a2,a2,…,an,an)
时间: 2024-10-11 17:13:26 浏览: 30
在C语言中,我们可以使用链表的节点结构体以及两个指针来实现这个需求。这里是一个简单的示例,我们将原链表复制一次,形成长度翻倍的新链表:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct Node {
int data; // 节点数据
struct Node* next; // 指向下一个节点的指针
} Node;
// 创建新节点并插入到链表中
Node* createNewNode(int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode != NULL) {
newNode->data = data;
newNode->next = NULL;
}
return newNode;
}
// 扩展链表
void extendList(Node** head) {
Node* oldHead = *head; // 获取原头结点
Node* newHead = oldHead; // 新链表头结点
while (oldHead != NULL) { // 遍历原链表
Node* newNode = createNewNode(oldHead->data); // 创建新节点
newNode->next = oldHead->next; // 将新节点连接到原节点之后
oldHead->next = newNode; // 更新原节点的指针
oldHead = oldHead->next; // 移动旧头节点到下一个位置
}
*head = newHead; // 设置新的头结点
}
// 打印链表
void printList(Node* head) {
while (head != NULL) {
printf("%d -> ", head->data);
head = head->next;
}
printf("NULL\n");
}
int main() {
// 初始化一个样例链表
Node* listHead = createNewNode(1);
listHead->next = createNewNode(2);
listHead->next->next = createNewNode(3);
printf("Original List:\n");
printList(listHead);
extendList(&listHead);
printf("\nExtended List:\n");
printList(listHead);
return 0;
}
```
在这个例子中,我们首先创建了一个包含三个元素的链表。然后通过`extendList`函数遍历原链表,并为每个节点创建一个新的节点,使得原链表中的元素顺序重复一次。最后打印出扩展后的链表。
阅读全文