LeetCode题目之腾讯精选练习(50题):反转链表

一时失言乱红尘 2024-04-18 16:48 143阅读 0赞

题目

反转一个单链表。

示例 :

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

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

算法实现

  1. public ListNode ReverseList(ListNode head)
  2. {
  3. ListNode cur = head;
  4. ListNode reverse = new ListNode(0);
  5. ListNode headr = reverse;
  6. var a = new List<int>();
  7. while (cur != null)
  8. {
  9. a.Add(cur.val);
  10. cur = cur.next;
  11. }
  12. a.Reverse();
  13. for (int i = 0; i < a.Count; i++)
  14. {
  15. reverse.next = new ListNode(a[i]);
  16. reverse = reverse.next;
  17. }
  18. return headr.next;
  19. }

执行结果

执行结果 : 通过
执行用时 : 124 ms, 在所有 C# 提交中击败了96.18%的用户
内存消耗 : 23.6 MB, 在所有 C# 提交中击败了5.26%的用户
在这里插入图片描述

小的总结

先按照自己的想法设计,想到的是链表数据存进list中,然后翻转,在创建一个新的listnode储存进去。之后看了题解,学习了迭代法。

迭代法

  1. public static ListNode ReverseList(ListNode head)
  2. {
  3. ListNode prev = null;
  4. ListNode curr = head;
  5. ListNode nextTemp;
  6. while (curr != null)
  7. {
  8. nextTemp = curr.next;
  9. curr.next = prev;
  10. prev = curr;
  11. curr = nextTemp;
  12. }
  13. return prev;
  14. }

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,143人围观)

还没有评论,来说两句吧...

相关阅读