LeetCode题目之腾讯精选练习(50题):反转链表
题目
反转一个单链表。
示例 :
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
进阶 :
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
算法实现
public ListNode ReverseList(ListNode head)
{
ListNode cur = head;
ListNode reverse = new ListNode(0);
ListNode headr = reverse;
var a = new List<int>();
while (cur != null)
{
a.Add(cur.val);
cur = cur.next;
}
a.Reverse();
for (int i = 0; i < a.Count; i++)
{
reverse.next = new ListNode(a[i]);
reverse = reverse.next;
}
return headr.next;
}
执行结果
执行结果 : 通过
执行用时 : 124 ms, 在所有 C# 提交中击败了96.18%的用户
内存消耗 : 23.6 MB, 在所有 C# 提交中击败了5.26%的用户
小的总结
先按照自己的想法设计,想到的是链表数据存进list中,然后翻转,在创建一个新的listnode储存进去。之后看了题解,学习了迭代法。
迭代法
public static ListNode ReverseList(ListNode head)
{
ListNode prev = null;
ListNode curr = head;
ListNode nextTemp;
while (curr != null)
{
nextTemp = curr.next;
curr.next = prev;
prev = curr;
curr = nextTemp;
}
return prev;
}
还没有评论,来说两句吧...