NC78 反转链表
描述
给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。
如当输入链表{1,2,3}时,
经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。
示例1
输入:
{1,2,3}
返回值:
{3,2,1}
示例2
输入:
{}
返回值:
{}
说明:
空链表则输出空
思路
需要一个新的节点来存放反转后的链表, 我们使用pre来做这个新的节点, 以将 2->3变为 2<-3为例, 如图所示简单分为三步:
1. 因为目的是能够实现 2<-3,需要cur = 3, pre = 2, 并且 pre <- cur。 因此要实现cur的移动,先要用Next来存放 cur.next
next = cur.next;
2. 要建立从3->2的关系,需要cur->next先指向pre(注意要先建立指向关系!)
cur.next = pre;
3. 移动pre和cur节点,先移动pre,再移动cur,顺序不要反
pre = cur;
cur = next;
注意:2和3的顺序不能颠倒!
具体代码
public class Solution {
public ListNode ReverseList(ListNode head) {
ListNode pre = null;
ListNode cur = head;
ListNode next = null;
if(head==null) return null;
while(cur!=null){
next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
return pre;
}
}