/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head) {
if(head==null||head.next==null)
}
return current;
}
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode ReverseList(ListNode head) {
if(head==null||head.next==null)
return head;
//一定要把前一个节点和当前节点设置为空!否则将出现死循环。
ListNode before=null,current=null;
//把下一个节点设置为头节点。
ListNode after=head;while(after!=null){
//①、把前一个节点设置为当前节点指向位置()
before=current;
//②、当前节点往后移动
current=after;
//③、下个节点也往后移动
after=current.next;
//④、然后将当前的下一个指向提前保存的前一个节点。
current.next=before;}
return current;
}
}
总结:
遍历反转链表一定需要三个额外的节点指针,当然是在不使用给的head指针的情况下,
分别是:
before(充当中间遍历、相当于交换两个数的tmp变量)
current(当前指针,需要遍历整个数组)
after(下一个的指针,做预判断是否已经到达链表尾)