在没有双指针的纯C语言中交换链表中的两个相邻节点,可以使用以下步骤:
下面是使用纯C语言实现交换链表中两个相邻节点的示例代码:
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构体
struct ListNode {
int val;
struct ListNode* next;
};
// 创建链表节点
struct ListNode* createNode(int val) {
struct ListNode* newNode = (struct ListNode*)malloc(sizeof(struct ListNode));
newNode->val = val;
newNode->next = NULL;
return newNode;
}
// 交换链表中两个相邻节点
struct ListNode* swapNodes(struct ListNode* head) {
if (head == NULL || head->next == NULL) {
return head;
}
struct ListNode* prev = NULL;
struct ListNode* curr = head;
struct ListNode* next = head->next;
// 判断链表头节点是否为要交换的节点
if (curr->val > next->val) {
head = next;
}
while (next != NULL) {
curr->next = next->next;
next->next = curr;
if (prev != NULL) {
prev->next = next;
}
prev = curr;
curr = curr->next;
if (curr != NULL) {
next = curr->next;
} else {
next = NULL;
}
if (next != NULL && curr->val > next->val) {
prev->next = next;
head = next;
}
}
return head;
}
// 打印链表
void printList(struct ListNode* head) {
struct ListNode* curr = head;
while (curr != NULL) {
printf("%d ", curr->val);
curr = curr->next;
}
printf("\n");
}
int main() {
// 创建链表
struct ListNode* head = createNode(1);
head->next = createNode(2);
head->next->next = createNode(3);
head->next->next->next = createNode(4);
head->next->next->next->next = createNode(5);
// 打印原始链表
printf("原始链表:");
printList(head);
// 交换相邻节点
head = swapNodes(head);
// 打印交换后的链表
printf("交换后的链表:");
printList(head);
return 0;
}
在以上示例代码中,我们使用了三个指针prev、curr和next来交换链表中的相邻节点,通过迭代遍历链表,并根据节点的值大小进行相应的节点交换操作。最后打印出交换后的链表。
领取专属 10元无门槛券
手把手带您无忧上云