zoukankan      html  css  js  c++  java
  • 力扣(LeetCode)反转链表 个人题解

    反转一个单链表。

    示例:

    输入: 1->2->3->4->5->NULL
    输出: 5->4->3->2->1->NULL

    进阶:
    你可以迭代或递归地反转链表。你能否用两种方法解决这道题?

    久违了。由于现实需要,从现在开始捡起来很久没用的C/C++来编写代码。

    这一题之前做过,但是由于使用了较为生疏的语言有些细节没掌握明白。

    思路比较简单,迭代的做法,假设链表:  1-> 2 -> 3 ->4 -> NULL

    假设curr指针指向1,设置prev指针为NULL,当curr不为NULL时,进行循环。

    1.使用局部变量 指针tmp 来保存curr->next的位置 ,此时tmp指向 2 

    2.设置curr->next 为prev,即 链表变为 NULL <- 1 -> 2 -> 3 -> 4 -> NULL

    3.设置prev 为 curr, 则此时 prev指向 1,新链表的头部

    4.设置 curr 为 prev, curr指向2,按照原链表的顺序循环下去

    代码如下:

    class Solution {
    public:
        ListNode* reverseList(ListNode* head) {
          if(!head) return head;
          ListNode* prev = new ListNode(NULL);
          ListNode* curr = head;
          while(curr)
          {
            ListNode* tmp = curr->next;
            curr->next = prev;
            prev = curr;
            curr = tmp;
          }
          return prev;
        }
    };
  • 相关阅读:
    ios本地推送
    ios BUG
    性能优化
    数据结构设计
    代码的可维护性
    NSMutalbleDictionary
    NSDictionary
    NSMutableArray
    java 容器
    Java bug
  • 原文地址:https://www.cnblogs.com/axiangcoding/p/10803953.html
Copyright © 2011-2022 走看看