一、题目内容
二、题解
解法1:
思路
遍历尾插法。建立 pre 节点、临时存储 curr.next 节点。时间On,空间O1
代码
class Solution {public ListNode reverseList(ListNode head) {ListNode pre = null;ListNode curr = head;while (curr != null) {ListNode next = curr.next;curr.next = pre;pre = curr;curr = next;}return pre;}}
解法2:
思路
代码
class Solution {public ListNode reverseList(ListNode head) {if (head == null || head.next == null) {return head;}ListNode newHead = reverseList(head.next);head.next.next = head;head.next = null;return newHead;}}
解法3:
思路
代码
class Solution {public ListNode reverseList(ListNode head) {if (head == null || head.next == null) {return head;}Stack<ListNode> stack = new Stack<ListNode>();//存进去while (head != null) {stack.push(head);head = head.next;}//取出来ListNode curr = stack.pop();//记录新headListNode newHead = curr;//清空原来存储的不对的nextcurr.next = null;while (!stack.isEmpty()) {curr.next = stack.pop();curr = curr.next;curr.next = null;}return newHead;}}
