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 };

      

  • 相关阅读:
    软件测试技术实战 设计、工具及管理(51Testing软件测试网作品系列)
    MATLAB智能算法超级学习手册
    HTML与CSS入门经典(第9版)
    深入理解Android 5 源代码
    中文版Dreamweaver CS6基础培训教程(第2版)
    可用性测试手册(第2版)
    网络综合布线系统与施工技术第4版
    PHP核心技术与最佳实践(第2版)
    [OC Foundation框架
    [OC Foundation框架
  • 原文地址:https://www.cnblogs.com/wanglei5205/p/8572458.html
Copyright © 2011-2022 走看看