1.头插法
(1)源码
/* 反转链表 ----迭代:《头插法》反转链表 */
public ListNode reverseList(ListNode head) {
if (head == null) {
return head;
}
// 将链表一分为二
ListNode prev = head.next;
head.next = null;
// 《头插法》
while (prev != null) {
ListNode stamp = prev;
prev = prev.next;
stamp.next = head;
head = stamp;
}
return head;
}
(2)图析
2.递归
(1)源码
/* 反转链表 ----递归 */
public ListNode reverseList(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode newHead = reverseList6(head.next);
ListNode tail = head.next; //1
head.next = null; //2
tail.next = head; //3
return newHead;
}