使用c语言实现单链表,包括初始化单链表、判断单链表是否为空、获取单链表长度、在单链表末尾插入节点、在单链表指定位置插入节点、删除单链表指定位置的节点、获取单链表指定位置的节点值、修改单链表指定位置的节点值、输出单链表等操作。
时间: 2023-07-10 09:16:51 浏览: 96
好的,我会根据您的要求进行回答。以下是使用c语言实现单链表的代码:
定义节点结构体:
```c
typedef struct Node {
int data; // 节点数据
struct Node *next; // 指向下一个节点的指针
} Node;
```
初始化单链表:
```c
void initList(Node **head) {
*head = NULL;
}
```
判断单链表是否为空:
```c
int isListEmpty(Node *head) {
return head == NULL;
}
```
获取单链表长度:
```c
int getListLength(Node *head) {
int length = 0;
Node *p = head;
while (p != NULL) {
length++;
p = p->next;
}
return length;
}
```
在单链表末尾插入节点:
```c
void insertAtEnd(Node **head, int data) {
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
if (*head == NULL) {
*head = newNode;
} else {
Node *p = *head;
while (p->next != NULL) {
p = p->next;
}
p->next = newNode;
}
}
```
在单链表指定位置插入节点:
```c
void insertAtPosition(Node **head, int data, int position) {
Node *newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
if (position == 1) {
newNode->next = *head;
*head = newNode;
} else {
Node *p = *head;
int i = 1;
while (i < position - 1 && p != NULL) {
p = p->next;
i++;
}
if (p == NULL) {
printf("插入位置无效\n");
free(newNode);
} else {
newNode->next = p->next;
p->next = newNode;
}
}
}
```
删除单链表指定位置的节点:
```c
void deleteAtPosition(Node **head, int position) {
if (*head == NULL) {
printf("链表为空\n");
} else if (position == 1) {
Node *p = *head;
*head = (*head)->next;
free(p);
} else {
Node *p = *head;
int i = 1;
while (i < position - 1 && p->next != NULL) {
p = p->next;
i++;
}
if (p->next == NULL) {
printf("删除位置无效\n");
} else {
Node *q = p->next;
p->next = q->next;
free(q);
}
}
}
```
获取单链表指定位置的节点值:
```c
int getNodeValue(Node *head, int position) {
Node *p = head;
int i = 1;
while (i < position && p != NULL) {
p = p->next;
i++;
}
if (p == NULL) {
printf("获取节点值失败\n");
return -1;
} else {
return p->data;
}
}
```
修改单链表指定位置的节点值:
```c
void modifyNodeValue(Node *head, int position, int data) {
Node *p = head;
int i = 1;
while (i < position && p != NULL) {
p = p->next;
i++;
}
if (p == NULL) {
printf("修改节点值失败\n");
} else {
p->data = data;
}
}
```
输出单链表:
```c
void printList(Node *head) {
Node *p = head;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
```
以上就是单链表的实现,可以根据需要进行调用。
阅读全文