题解 | #反转链表#
反转链表
http://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
这是一道典型的双指针。我们先把一个节点的下一节点存好(防止丢失),再把它摘下来,
让它指向它的前一个节点pre(初始化为null)。
然后让pre指向head,也就是向前移动。
最后再把存好的原下一个节点赋给head,这样之前的那个节点指向改变并被摘除了。
现在剩下节点的起始节点还是head。开始下一次循环,直到head为空,此时pre为新链表的头节点
返回pre即可
public class Solution {
public ListNode ReverseList(ListNode head) {
if(head == null){
return null;
}
ListNode pre = null;
while(head != null){
ListNode p = head.next;
head.next = pre;
pre = head;
head = p;
}
return pre;
}
}