/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
// 迭代
class Solution {
public ListNode reverseList(ListNode head) {
// 申请节点,pre和 cur,pre指向null
ListNode pre = null;
ListNode tmp = null;
ListNode cur = head;
while (cur != null) {
// 记录当前节点的下一个节点
tmp = cur.next;
// 然后将当前节点指向pre
cur.next = pre;
// pre和cur节点都前进一位
pre = cur;
cur = tmp;
}
return pre;
}
}
// 递归
class Solution {
public ListNode reverseList(ListNode head) {
//递归终止条件是当前为空,或者下一个节点为空
if(head==null || head.next==null) {
return head;
}
//这里的cur就是最后一个节点
ListNode cur = reverseList(head.next);
//这里请配合动画演示理解
//如果链表是 1->2->3->4->5,那么此时的cur就是5
//而head是4,head的下一个是5,下下一个是空
//所以head.next.next 就是5->4
head.next.next = head;
//防止链表循环,需要将head.next设置为空
head.next = null;
//每层递归函数都返回cur,也就是最后一个节点
return cur;
}
}
leetcode206. 反转链表
最新推荐文章于 2022-09-07 19:41:20 发布