题解 | #反转链表#
反转链表
http://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca
指针原地解法
利用指针原地改变指针方向,设一个pre指针,最开始指向null,一个cur指针指向head,
- 不断通过遍历cur, 改变cur.next的值,遍历过程中更新cur和pre的值;
- 在循环中设一个指针记录cur指针的next值;
- 直到cur为null跳出循环; 废话少说,上图:
由于每次都要改动cur.next的值,所以每次要用一个变量来记录下来,(我这里把变量定义在了循环外面,当然也可以放在循环内部)代码如下
public class Solution {
public ListNode ReverseList(ListNode head) {
//设立三个指针,一个cur指向当前节点,一个pre指示当前节点的前驱,一个temp记录cur的值
//返回pre指针,
ListNode cur = head;
ListNode pre = null;
ListNode temp = null;
while(cur!=null){
temp = cur.next;
cur.next = pre; //注意循环里,最后一个一次循环的时候指向最后节点的指针是pre
pre = cur;
cur = temp;
}
return pre;
}
}