力扣反转链表

haimian
2024-11-17 / 0 评论 / 4 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2024年11月17日,已超过154天没有更新,若内容或图片失效,请留言反馈。

还是一如既往的链表,这个链表我一时间没有想到。
我知道用双指针,但是我想的版本是前面一个pre指针 后面一个last指针,同时遍历,知道中间的时候,也就是说中间的时候直接返回。
后来看了别人的后,改了一下思路。
我先上题目
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例 1:

p1
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例 2:
p2

输入:head = [1,2]
输出:[2,1]
示例 3:

输入:head = []
输出:[]

以下是第一种思路的代码

struct ListNode* reverseList(struct ListNode* head) {
    // 如果链表为空或者只有一个节点,直接返回头节点
    if (head == NULL || head->next == NULL) {
        return head;
    }

    // 递归反转除第一个节点外的其余链表
    struct ListNode* newHead = reverseList(head->next);

    // 将第一个节点连接到反转后的链表末尾
    head->next->next = head;
    head->next = NULL;

    return newHead;
}

以下是第二种思路

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* reverseList(struct ListNode* head) {
    struct ListNode* pre = NULL;
    struct ListNode* cur = head;
    while(cur){
        struct ListNode temp = cur -> next;
        cur -> next = pre;
        pre = cur;
        cur = temp;
    }
    return pre;

}
![m3lrncqo.png](https://blog.wzl.icu/usr/uploads/2024/11/679295098.png)
0

评论 (0)

取消