zoukankan      html  css  js  c++  java
  • 反转链表

    题目:输入一个链表,反转链表后,输出新链表的表头。

    这道题可以画一个链表,反转后的链表其实是将每个箭头的方向翻转过来,再让原来的头节点指向空,即可。怎样实现呢?

    我们可以通过两个指针来实现,第一个指针a指向头节点,第二个指针b指向a的下一个节点,然后翻转箭头的实现就是让b指向a,也就是b的下一个节点为a。但是这样只翻转了一个箭头,我们要将所有的箭头都翻转过来,因此,让a往前走一步,b也往前走一步,然后继续翻转即可。那么怎么往前走呢,这里需要定义一个辅助的指针c,让c指向b的下一个节点,然后a走到b的位置,b走到c的位置,就好了。整个过程一直持续到b所指的节点为最后一个节点,所以当b所指的节点不为空时,一直循环。

    当跳出循环后,因为原来的头节点翻转后变成了最后一个节点,所以还要让原来的头节点指向空。跳出循环后,a指针指向原链表最后一个节点,也就是新链表的头节点,所以返回a指针所指的节点,就得到了反转后的链表。

    c++代码如下:

     1 class Solution {
     2 public:
     3     ListNode* ReverseList(ListNode* pHead) {
     4         if(!pHead) return pHead;
     5         auto a = pHead, b = a->next;
     6         while(b){
     7             auto c = b->next;
     8             b->next = a;
     9             a = b;
    10             b = c;
    11         }
    12         pHead->next = nullptr;
    13         return a;
    14     }
    15 };
  • 相关阅读:
    java web 里的JSP 对象的简单了解
    PLSQL 语言 异常 函数 存储过程
    PLSQL语言 分支循环
    高级查询
    oracle 杂项
    sql 里面的常用函数
    java所有内容练习
    线程
    oracle基础 知识点

  • 原文地址:https://www.cnblogs.com/hellosnow/p/11656688.html
Copyright © 2011-2022 走看看