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

      

  • 相关阅读:
    Treap仿set 模板
    线段树(区间更改,区间查最值)模板
    UVA 12345 Dynamic len(带修莫队)
    服务器配置环境以及部署项目流程
    使用SSH的scp命令行传输文件到远程服务器
    服务器部署javaweb项目
    在ubuntu服务器上安装mysql并配置外网访问
    在ubuntu服务器上配置tomcat
    在ubuntu服务器上配置jdk
    linux命令--解压与压缩
  • 原文地址:https://www.cnblogs.com/wanglei5205/p/8572458.html
Copyright © 2011-2022 走看看