生产企业网站欣赏,淘宝网店的seo主要是,长沙制作网站公司哪家好,丽水专业网站建设公司反转链表
Leetcode题目链接
题意#xff1a;翻转一个单链表
#x1f330;:
输入: 1-2-3-4-5-NULL
输出: 5-4-3-2-1-NULL
在链表本身进行反转即可#xff0c;不用重新定义链表#xff0c;这同时浪费时间和空间。
需要采用哑…反转链表
Leetcode题目链接
题意翻转一个单链表
:
输入: 1-2-3-4-5-NULL
输出: 5-4-3-2-1-NULL
在链表本身进行反转即可不用重新定义链表这同时浪费时间和空间。
需要采用哑节点吗 不需要的如果使用了哑节点还会造成报错。 如果给原链表添加哑节点 dummy -1-2-3-4-5-NULL 那么我们反转后就变成了 5-4-3-2-1-dummy 这是不合理的所以不使用哑节点。 还有一个问题循环判断的条件是什么 在该问题中当链表被遍历到末尾后程序便结束。 所以需要一个条件来确定链表是否已经被遍历到末尾。 代码如下
class Solution{public ListNode reverseList(ListNode head){ListNode pre null;ListNode cur head;ListNode next null;while(cur ! null){next cur.next;cur.next pre;pre cur;cur next;}//注意反转链表后原来的末尾成为现在的头return pre; }
}递归方法
// 递归
// 递归的核心思路和双指针是一样的。
class Solution {public ListNode reverseList(ListNode head) {return reverse(null, head);}private ListNode reverse(ListNode prev, ListNode cur) {// 注意递归出来的条件当前节点为null表明已经遍历完成if (cur null) {return prev;}ListNode temp null;temp cur.next;// 先保存下一个节点cur.next prev;// 反转// 更新prev、cur位置// prev cur;// cur temp;return reverse(cur, temp);}
}