LeetCode206
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1]
1. 建立虚拟头结点辅助反转
在分析链表插入元素的时候,会发现如何处理头结点是个比较麻烦的问题,为此可以先建立一个虚拟的结点dummyHead,这样可以很好的简化我们的操作。如下图所示,如果我们将链表
{1 -> 2 -> 3 -> 4 - > 5}进行反转,我们首先建立虚拟结点dummyHead,并令dummyHead.next = node(1)。
接下来我们每次从旧的链表拆下来一个结点接到dummyHead后面,然后将其他线调整好就可以了。
public ListNode reverseList(ListNode head) {
ListNode dummyHead = new ListNode(-1);
ListNode current = head;
while (current != null) {
ListNode nextTemp = current.next;
current.next = dummyHead.next; // 对应第一步
dummyHead.next = current;// 对应第二步
current = nextTemp;
}
return dummyHead.next;
}
2. 直接操作链表进行反转
public ListNode reverseList(ListNode head) {
ListNode pre = null;
ListNode cur = head;
while (cur != null) {
ListNode nextTemp = cur.next;
cur.next = pre;
pre = cur;
cur = nextTemp;
}
return pre;
}