• 反转链表


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

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

    我们可以通过两个指针来实现,第一个指针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 };
  • 相关阅读:
    dup和dup2
    cassandra nodetools
    python 之mechanize
    IDEA使用GsonFormat
    游标应用
    SQL 2005 with(nolock)详解
    SET NOCOUNT ON
    异常处理机制(Begin try Begin Catch)
    FILLFACTOR 作用 sql
    触发器语法
  • 原文地址:https://www.cnblogs.com/hellosnow/p/11656688.html
Copyright © 2020-2023  润新知