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

      

  • 相关阅读:
    linux下的epoll怎样高效处理百万连接
    poj 3020 Antenna Placement(二分无向图 匈牙利)
    放大的X(杭电2565)
    各种语言推断是否是手机设备
    【iOS开发-32】iOS程序真机调试须要购买调试证书怎么办?
    UIActionSheet 提示框
    关于ZEDboard
    javaScript 检測 能否够连接指定server
    陈-朱-兴- js写法【案例】:
    H5网页动画制作(页面切换、效果等)
  • 原文地址:https://www.cnblogs.com/wanglei5205/p/8572458.html
Copyright © 2011-2022 走看看