创建一个由6个结点的单向链表,实现结点的增加、删除、查找、移动、遍历显示等功能,c语言代码
时间: 2024-01-03 14:05:56 浏览: 82
以下是基于C语言实现的单向链表代码,包括结点的增加、删除、查找、移动、遍历显示等功能:
```c
#include <stdio.h>
#include <stdlib.h>
// 结点定义
typedef struct _Node {
int data;
struct _Node* next;
} Node;
// 创建结点
Node* createNode(int data) {
Node* pNode = (Node*)malloc(sizeof(Node));
pNode->data = data;
pNode->next = NULL;
return pNode;
}
// 在链表尾部插入结点
int insertNode(Node* head, Node* newNode) {
if (head == NULL || newNode == NULL) {
return 0;
}
Node* p = head;
while (p->next != NULL) {
p = p->next;
}
p->next = newNode;
return 1;
}
// 删除指定结点
int deleteNode(Node* head, Node* pDelete) {
if (head == NULL || pDelete == NULL) {
return 0;
}
if (head == pDelete) {
head = head->next;
free(pDelete);
return 1;
}
Node* p = head;
while (p->next != NULL && p->next != pDelete) {
p = p->next;
}
if (p->next == NULL) {
return 0;
}
p->next = pDelete->next;
free(pDelete);
return 1;
}
// 查找指定数据的结点
Node* findNode(Node* head, int data) {
if (head == NULL) {
return NULL;
}
Node* p = head;
while (p != NULL && p->data != data) {
p = p->next;
}
return p;
}
// 将指定结点移动至链表尾部
int moveNodeToEnd(Node* head, Node* pNode) {
if (head == NULL || pNode == NULL || head == pNode) {
return 0;
}
Node* p = head;
while (p->next != NULL && p->next != pNode) {
p = p->next;
}
if (p->next == NULL) {
return 0;
}
p->next = pNode->next;
pNode->next = NULL;
insertNode(head, pNode);
return 1;
}
// 遍历链表并打印结点值
void traverseNode(Node* head) {
if (head == NULL) {
return;
}
Node* p = head;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main() {
// 创建头结点和 6 个结点,并插入链表中
Node* head = createNode(0);
Node* node1 = createNode(1);
Node* node2 = createNode(2);
Node* node3 = createNode(3);
Node* node4 = createNode(4);
Node* node5 = createNode(5);
insertNode(head, node1);
insertNode(head, node2);
insertNode(head, node3);
insertNode(head, node4);
insertNode(head, node5);
// 遍历链表并打印结点值
traverseNode(head);
// 查找结点值为 3 的结点
Node* pNode = findNode(head, 3);
if (pNode != NULL) {
printf("find node: %d\n", pNode->data);
}
// 删除结点值为 2 的结点
pNode = findNode(head, 2);
if (pNode != NULL) {
deleteNode(head, pNode);
}
traverseNode(head);
// 将结点值为 1 的结点移动至链表尾部
pNode = findNode(head, 1);
if (pNode != NULL) {
moveNodeToEnd(head, pNode);
}
traverseNode(head);
return 0;
}
```
这段代码实现了创建一个由 6 个结点的单向链表,并实现了结点的增加、删除、查找、移动、遍历显示等功能。注意不要泄露开头的秘密要求。
阅读全文