单向链表删除倒数第二个节点C语言
时间: 2024-10-19 17:01:50 浏览: 22
单向链表删除倒数第二个节点的操作在C语言中需要一些额外的步骤,因为链表的遍历通常是从头到尾进行,无法直接访问最后一个元素。以下是删除倒数第二个节点的一种常见方法:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建新节点
Node* createNode(int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (newNode != NULL) {
newNode->data = value;
newNode->next = NULL;
}
return newNode;
}
// 删除倒数第二个节点(假设head非空)
void deleteSecondLast(Node** head) {
if (*head == NULL || (*head)->next == NULL) { // 如果链表只有一个节点或为空,直接返回
printf("链表中没有第二个节点。\n");
return;
}
Node* temp = *head; // 初始化临时指针
while (temp->next->next != NULL) { // 遍历链表直到倒数第二个节点
temp = temp->next;
}
temp->next = NULL; // 将倒数第二个节点的next设为NULL,使其从链表中移除
}
// 打印链表
void printList(Node* node) {
while (node != NULL) {
printf("%d -> ", node->data);
node = node->next;
}
printf("NULL\n");
}
int main() {
Node* head = createNode(1); // 假设链表初始有1个节点
head->next = createNode(2);
head->next->next = createNode(3); // 添加更多节点
printf("原始链表: ");
printList(head);
deleteSecondLast(&head);
printf("删除倒数第二个节点后的链表: ");
printList(head);
return 0;
}
```
阅读全文