反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
进阶:
你可以迭代或递归地反转链表。你能否用两种方法解决这道题?
从微观角度来看,先解决第一轮链表反转,第一轮当然是1->2节点的反转,先初始化一个pre节点,这个节点为null,接着先把cur的下个节点保存起来,因为我们后期要维护这个节点,就设置成tmp吧。我们迎来了最重要的一个环节,就是红色箭头那个操作,cur的next打到pre的位置上,我们在维护下pre,就是将当前的cur设置为pre,将之前保存的tmp设置为cur,第一轮就结束了,由此可见,这道题其实就是不断地维护cur的位置,pre的位置,以及tmp的位置。
public ListNode reverseList(ListNode head) {
ListNode pre = null;
ListNode cur = head;
while (cur != null) {
ListNode tmp = cur.next;
cur.next = pre;
pre = cur;
cur = tmp;
}
return pre;
}