一、问题描述:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
二、解法
法一:迭代法:
假设存在链表 1 → 2 → 3 → Ø,我们想要把它改成 Ø ← 1 ← 2 ← 3。
在遍历列表时,将当前节点的 next 指针改为指向前一个元素。由于节点没有引用其上一个节点
因此必须事先存储其前一个元素。在更改引用之前,还需要另一个指针来存储下一个节点。
不要忘记在最后返回新的头引用!
public static ListNode reverseList(ListNode head) {
ListNode pre=null;
ListNode cur=new ListNode(0);
cur=head;
while(cur!=null) {
ListNode temp=new ListNode(0);
temp=cur.next;
cur.next=pre;
pre=cur;
cur=temp;
}
return pre;
}
法二:递归法
递归版本稍微复杂一些,其关键在于反向工作。假设列表的其余部分已经被反转,现在我该如何反转它前面的部分?
public ListNode reverseList(ListNode head) {
if (head == null || head.next == null) return head;
ListNode p = reverseList(head.next);
head.next.next = head;
head.next = null;
return p;
}
本文转载自链接:https://leetcode-cn.com/problems/reverse-linked-list/solution/fan-zhuan-lian-biao-by-leetcode/