题目
反转一个单链表。
进阶:
链表可以迭代或递归地反转。你能否两个都实现一遍?
解法
newHead
\
setup 1 : 1 -> 2 -> 3 -> 4
head next
setup 2 : newHead
\
1 -> 2 -> 3 -> 4
head next
newHead <-----
\ |
setup 2.1 : 1 -> 2 -x- 3 -> 4
head next
newHead
\
setup 2.2 : 1 <- 2 -x- 3 -> 4
head next
newHead
setup 2.3 : 2 -> 1 -> 3 -> 4
head next
public ListNode reverseList(ListNode head) {
/* iterative solution */
ListNode newHead = null;
// 不断取出和向后移动头节点
// 并将头节点连接到新头节点后面
while (head != null) {
// 单独取出下一个节点
ListNode next = head.next;
// 将头节点连接到新头节点后面
head.next = newHead;
newHead = head;
// 向后移动头节点
head = next;
}
return newHead;
}