啊好久没更文了,前两天状态不太好。还是要坚持更文敲题噢!
文章目录
- 题目描述
- 思路 & 代码
题目描述
- 面试高频题,需要会用两种方法解决!(迭代 and 递归)
- 其实先写出迭代,递归就不难写了。
思路 & 代码
- 先来个迭代!
- 总体思路就是保存下一个结点temp,对当前结点进行转向,下一轮又从temp开始。
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val = val; }* ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode reverseList(ListNode head) {ListNode now = head;ListNode pre = null;// 迭代法while(now != null){ListNode temp = now.next;now.next = pre;pre = now;now = temp;}return pre;}
}
- 递归法:和迭代差不多,传入的参数就是temp
- 每次都返回下一个结点,最终就能返回更新成头结点的旧尾结点。
/*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val = val; }* ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/// 递归做法
class Solution {public ListNode reverseList(ListNode head) {return reverse(head, null);} public ListNode reverse(ListNode head, ListNode pre) {if(head == null) {return pre;}ListNode next = head.next;head.next = pre;return reverse(next, head);}
}