【链表OJ题 1】反转链表

简介: 【链表OJ题 1】反转链表

题目来源:

力扣

题目描述:


代码实现

1、方法一

struct ListNode* reverseList(struct ListNode* head) {
    struct ListNode* prev = NULL, * cur = head;
    while (cur)
    {
        struct ListNode* next = cur->next;
        //头插
        cur->next = prev;
        prev = cur;
        //迭代
        cur = next;
    }
    return prev;
}

1.1分析


方法一是头插法。


创建三个结构体指针变量:prev、cur、next。


我们先置空 prev,将头指针 head 存放在 cur 中,next 存放 cur 的 next。第一次 cur 的 next 赋值为 prev 就是空,next 指向 cur的next,prev 指向当前的 cur。不断循环,当 cur 为空时就将整个链表反转完成了。


重点:


1.循环:next = cur->next; cur->next = prev; prev = cur; cur = next; 这个循环体的顺序是不可以交换的。 循环条件应该是 cur != NULL 时就进入循环,等于 NULL 的话就说明全部的结点头插已经完成了。


2.返回值:因为是头插,prev 一直指向头结点,所以返回 prev。return prev;



2、方法二

struct ListNode* reverseList(struct ListNode* head) {
    if(head == NULL)
        return NULL;
    struct ListNode* n1 = NULL, * n2 = head, * n3 = n2->next;
    while (n2)
    {
        n2->next = n1;
        n1 = n2;
        n2 = n3;
        if(n2 != NULL)
            n3 = n3->next;
    }
    return n1;
}

2.1 分析


方法二是逆置法,将开始向右的箭头改为向左就逆置成功了。


创建三个结构体指针变量:n1、n2、n3。


先置空 n1 ,将 head 存放在 n2 中,n3 保存 n2的next。将 n2的next 指向 n1,这样就可以让头结点的next指向空;然后将 n1 赋值为 n2;再将 n2 赋值为 n3;n2 如果指向的结点不为空,n3 就在自己的基础上再往后走一步。


重点:


1.如果原链表为空,就返回NULL;


2.循环:n2->next = n1; n1 = n2; n2 = n3; n3 = n3->next; 这个循环体的顺序是不可以交换的。以我们的图来看,当 n2 为空的时候循环停止,因此循环条件为 n2(n2 != NULL 与 n2 是一样的)。


3.返回值:我们的 n2 走到 NULL 的时候,n1 正好就指向了原链表的尾结点,因为是逆置,所以返回的就是尾结点。return n1;


4.循环体中,最后一次改变 n3 时 n3 已经是空了,再让 n3 = n3 ->next, 会出现空指针问题,因此我们在 n3 的改变上加一个判断条件 n3 != NULL,如果为空 n3 就不再往后移了。



相关文章
|
29天前
|
存储 Java
数据结构第三篇【链表的相关知识点一及在线OJ习题】
数据结构第三篇【链表的相关知识点一及在线OJ习题】
24 7
|
4月前
【数据结构OJ题】环形链表
力扣题目——环形链表
36 3
【数据结构OJ题】环形链表
|
4月前
【数据结构OJ题】复制带随机指针的链表
力扣题目——复制带随机指针的链表
51 1
【数据结构OJ题】复制带随机指针的链表
|
4月前
【数据结构OJ题】环形链表II
力扣题目——环形链表II
29 1
【数据结构OJ题】环形链表II
|
4月前
【数据结构OJ题】相交链表
力扣题目——相交链表
32 1
【数据结构OJ题】相交链表
|
4月前
【数据结构OJ题】合并两个有序链表
力扣题目——合并两个有序链表
39 8
【数据结构OJ题】合并两个有序链表
|
4月前
【数据结构OJ题】链表中倒数第k个结点
牛客题目——链表中倒数第k个结点
32 1
【数据结构OJ题】链表中倒数第k个结点
|
4月前
【数据结构OJ题】链表分割
牛客题目——链表分割
29 0
【数据结构OJ题】链表分割
|
4月前
【数据结构OJ题】链表的回文结构
牛客题目——链表的回文结构
36 0
【数据结构OJ题】链表的回文结构
|
4月前
【数据结构OJ题】链表的中间结点
力扣题目——链表的中间结点
24 0
【数据结构OJ题】链表的中间结点