数据结构,使用c语言定义单向循环链表节点类型,尾插法创建单向循环链表并返回尾指针,定义打印输出单向循环链表节点,在main函数中编写测试(1)分别创建循环链表La和Lb (2)编写合并算法,存储到Lc (3)编写输出 Lc验证合并结果
时间: 2024-09-25 20:04:10 浏览: 47
C语言实现输出链表中倒数第k个节点
5星 · 资源好评率100%
在 C 语言中,我们可以首先定义一个单向循环链表的节点结构体,包含数据域、下一个节点指针以及链表的尾指针。这里是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义单向循环链表节点
typedef struct Node {
int data; // 节点数据
struct Node* next; // 指向下一个节点
struct Node* tail; // 链表尾部指针
} ListNode;
// 创建新节点并初始化
ListNode* createNode(int value) {
ListNode* newNode = (ListNode*)malloc(sizeof(ListNode));
if (newNode != NULL) {
newNode->data = value;
newNode->next = newNode;
newNode->tail = newNode;
}
return newNode;
}
// 尾插法插入节点到链表尾部
ListNode* insertTail(ListNode** head, int value) {
ListNode* newNode = createNode(value);
if (*head == NULL) {
*head = newNode;
*head->tail = *head;
} else {
(*head)->tail->next = newNode;
(*head)->tail = newNode;
}
return *head;
}
// 打印循环链表
void printList(ListNode* head) {
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
if (head == *head) break; // 如果到达头节点,则表示是循环链表
}
printf("\n");
}
int main() {
// (1) 创建循环链表 La 和 Lb
ListNode* La = insertTail(&La, 1); insertTail(&La, 2); insertTail(&La, 3);
ListNode* Lb = insertTail(&Lb, 4); insertTail(&Lb, 5);
// (2) 合并两个链表到 Lc
ListNode* Lc = La;
if (Lb != NULL && Lb != La) {
Lc->tail->next = Lb;
Lb->tail = Lc->tail;
}
// (3) 输出 Lc 验证结果
printList(Lc);
// 示例输出: "1 2 3 4 5 "
//
阅读全文