zoukankan      html  css  js  c++  java
  • 【剑指offer】反转链表,C++实现(链表)

    1.题目

    • 输入一个链表的头结点,首先反转链表后,然后输出链表的所有元素(牛客网)。
    struct ListNode {
    	int val;
    	struct ListNode *next;
    };

    2.思路

    # 反转链表

      辅助指针:定义三个用于翻转链表的辅助指针和一个用于表示翻转链表头结点的指针,node指向当前节点、left指向当前节点的前一个节点、right指向当前节点的下一个节点、ReverseHead指向翻转链表的头结点。

      翻转链表过程:循环翻转链表,每次循环翻转一个结点。判断node是否是最后一个结点,如果是最后一个节点,则reverseHead指向node(确定翻转链表表头节点),然后node指向left(翻转链表),退出循环;如果不是最后一个节点,则node指向left(翻转链表),移动left和node指针。

    # 鲁棒性

    • 空链表
    • 有一个节点的链表
    • 有多个节点的链表

    3.code

      1 /*
      2 struct ListNode {
      3     int val;
      4     struct ListNode *next;
      5     ListNode(int x) :
      6             val(x), next(NULL) {
      7     }
      8 };*/
      9 class Solution {
     10 public:
     11     ListNode* ReverseList(ListNode* pHead)
     12     {
     13         // 反转指针
     14         ListNode* pNode=pHead;  // 当前节点
     15         ListNode* pPrev=nullptr;// 当前节点的上一个节点
     16         ListNode* pNext=nullptr;// 当前节点的下一个节点
     17         ListNode* pReverseHead=nullptr;//新链表的头指针
     18 
     19         // 反转链表
     20         while(pNode!=nullptr)
     21         {
     22             pNext=pNode->next; // 建立链接
     23           
     24             if(pNext==NULL)    // 判断pNode是否是最后一个节点
     25                 pReverseHead=pNode;
     26 
     27             pNode->next=pPrev; // 指针反转
     28             pPrev=pNode;
     29             pNode=pNext;
     30         }
     31         return pReverseHead;
     32     }
     33 };

      

  • 相关阅读:
    前端各种小细节
    图片等比例缩放
    微信小程序倒计时,购物车,向左滑删除 左拉删除
    微信小程序用户拒绝授权,重新调起授权
    微信小程序swiper切换卡内嵌滚动条不显示
    php面试总结
    tp5.0 学习(三):URL和路由
    pytorch 基础内容
    Grammarly for Chrome-语法、用词自动检查
    时空图神经网路:STGNNs
  • 原文地址:https://www.cnblogs.com/wanglei5205/p/8572458.html
Copyright © 2011-2022 走看看