思路
1.递归,这道题没办法使用递归,因为没有链,只有节点,无法正确返回头节点
2.双指针,很简单。pre指针与current指针,通过一个辅助指针就可以实现挪动一步就反转一个节点
3.入栈法,也挺简单。
结果
1.双指针法
运行时间:15ms
占用内存:11012KB
2.入栈法
运行时间:15ms
占用内存:10964KB
代码
1.双指针
public class Solution {
public ListNode ReverseList(ListNode head) {
// 方法2-双指针法
ListNode preNodePoint = null;
ListNode currentNodePoint = head;
while (currentNodePoint != null){
ListNode tempNext = currentNodePoint.next;
currentNodePoint.next = preNodePoint;
preNodePoint = currentNodePoint;
currentNodePoint = tempNext;
}
return preNodePoint;
}
}1.入栈法
import java.util.Stack;
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
// 栈法
public ListNode ReverseList(ListNode head) {
if (head == null || head.next == null) return head;
Stack<ListNode> stack = new Stack<>();
while (head != null){
stack.push(head);
head = head.next;
}
ListNode newHeadNode = stack.peek();
while (!stack.isEmpty()){
ListNode lastNode = stack.pop();
if (stack.isEmpty()) lastNode.next = null;
else lastNode.next = stack.peek();
}
return newHeadNode;
}
}
京公网安备 11010502036488号