C语言实现单链表反转

最近在考研复习,记录一下基础的数据结构算法,有事没事翻一翻,以防忘了

自己写了个翻转链表算法,感觉要比别人的要通俗易懂些

void Reverse(List *L){
    //分别是当前节点,直接前驱节点,直接后继节点
    LNode *current, *pre, *pnext;
    //初始化
    current  = L -> next;
    pre = NULL;
    while(current != NULL){

        //保留后继节点
        pnext = current -> next;
        //新的后继指向前驱实现反转
        current -> next = pre;

        //将当前节点向后移动
        pre = current;
        current = pnext;
    }
    return;
}

 

C语言中,单链表反转一个常见的数据结构操作,通常通过迭代或递归的方式来实现。这里我会介绍一种常见的迭代方法: **迭代法(Node指针):** ```c #include <stdio.h> #include <stdlib.h> // 定义链表节点结构体 typedef struct Node { int data; struct Node* next; } Node; // 反转链表函数 Node* reverseList(Node* head) { if (head == NULL || head->next == NULL) { return head; } Node* prev = NULL; // 初始化前驱指针 Node* curr = head; // 初始化当前指针 // 遍历链表,每次将当前节点的next指向前驱节点 while (curr != NULL) { Node* temp = curr->next; // 保存当前节点的下一个节点 curr->next = prev; // 将当前节点的next指向前驱 prev = curr; // 前驱指针前进 curr = temp; // 当前指针前进到下一个节点 } return prev; // 最终返回新的头节点 } // 测试反转操作 void printList(Node* head) { while (head != NULL) { printf("%d -> ", head->data); head = head->next; } printf("NULL\n"); } int main() { // 创建一个测试链表 Node* head = createLinkedList(); // 假设createLinkedList()是创建链表的函数 printList(head); // 打印原始链表 head = reverseList(head); // 反转链表 printList(head); // 打印反转后的链表 return 0; } ``` **相关问题:** 1. 迭代法和递归法在链表反转中的区别是什么? 2. 如果链表中有环,上述代码还能正确反转吗?为什么? 3. 除了迭代法,还有哪些方法可以实现单链表反转
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值