链表翻转

作者: Rehma | 来源:发表于2020-03-18 17:51 被阅读0次

基本思路

从前往后遍历链表,定义三个指针分别指向相邻三个结点。
反转前两个结点,即让第二个结点指向第一个结点。
然后依次往后移动指针,直到第二个结点为空循环结束。
最后再处理链表头尾即可。

listNode.png

代码实现

//节点定义 
struct ListNode {
    int val;
    ListNode *next;
    ListNode (int _val):val (_val),next (nullptr) { }
};

ListNode* ReverseList(ListNode *head){
    if (head == nullptr || head->next == nullptr){
      return head;
    }else{
        
        ListNode *p1 = head;
        ListNode *p2 = p1->next;
        ListNode *p3 = p2->next;//p3为了记录p2后的节点是否为空
        
        while (p2) {
            p3 = p2->next;
            p2->next = p1;
            p1 = p2;
            p2 = p3;
        }

        head->next = nullptr;
        head = p1;
        return head;
    }
}

相关文章

  • 翻转链表

    翻转链表 描述翻转一个链表 样例给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->nul...

  • 25. K 个一组翻转链表

    K个一组反转链表 翻转链表给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它...

  • 链表翻转

    给定单向链表,返回翻转后的链表

  • 链表

    1.翻转链表链表的定义 翻转 快慢指针找链表 的中间位置 3.有序链表的合并 4.判断链表中是否有环解法1: 借助...

  • Swift - LeetCode - 翻转链表

    题目 翻转链表 问题: 翻转链表中第m个节点到第n个节点的部分 说明: m,n满足1 ≤ m ≤ n ≤ 链表长度...

  • K 个一组翻转链表(递归,Kotlin)

    25. K 个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k 是一个正整数,它...

  • leetcode第九十二题—反转链表 II

    又是一道升级题,还记得原来的翻转链表嘛,这个是要求指定m和n翻转链表。或许你忘了链表翻转怎么做,我编一个口诀:要问...

  • 【LeetCode】25.K个一组翻转链表

    题目描述 25.K个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。 k是一个正整数...

  • 翻转单链表

    翻转单链表 方法一:将单链表头插到一个新链表中 浪费空间,不过简单 方法二:使用三个指针遍历单链表,逐个点进行翻转...

  • 【Leetcode】【链表】025-Reverse Nodes

    k个一组翻转链表 给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表。k 是一个正整数,它的值小于或等于...

网友评论

    本文标题:链表翻转

    本文链接:https://www.haomeiwen.com/subject/ryycyhtx.html