LeetCode题目:reverse linked list
题目概述:
Input: 1->2->3->4->5->NULL
Output: 5->4->3->2->1->NULL
解题方法
- 迭代:
public ListNode reverseList(ListNode head) {
if (head==null) {
return head;
}
ListNode pre = null;
ListNode next = null;
while (head != null) {
next = head.next;
head.next = pre;
pre = head;
head = next;
}
return pre;
}
思路 :每回遍历一个节点,修改该节点的指向即可。
- 递归
public ListNode reverseList(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode newHead = reverseList(head.next); (1)
head.next.next = head; (2)
head.next = null; (3)
return newHead;
}
思路:
(1)对于递归方法,采取黑箱的思想,不去想方法内部的细节,只管返回的内容。所以这一步的意思是:得到最后一个节点‘5’,此时head是‘4’这个节点;
(2)将head也就是‘4’这个节点的下一个节点指向‘4’,即:‘5’一>‘4’;
(3)设置当前链表的尾节点,即:‘4’一>null,当前链表变为 ‘5’一>‘4’一>null, 如果不设置的话,最后反转的链表没有尾节点,导致错误。之后进入head是‘3’…