首先要判断给出的头节点是否为空,如果为空直接返回,如果不为空才可以进行反转。
因为每个节点只有一个next指针记录它的下一个节点的地址,所以应该需要两个变量分别记录当前节点左右两边的节点,否则反转链表之后就没办法连上后面的节点了。
通过循环遍历当前链表,在遍历过程中反转链表,当前节点遍历到最后为null时,循环停止,此时当前节点为null,所以它的前一个节点就是新链表的第一个节点。
注意 : 当前节点的前一个节点是从null开始的,当前节点一定要放在中间 ,记录它的前后各一个节点,否则循环过程易错。
/*
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)
return head; //head为null直接返回。
ListNode pNode = head; //表示当前节点
ListNode pre = null; //当前节点的前一个节点
ListNode next = null; //当前节点的后一个节点
while(pNode != null){
next = pNode.next; //记录下当前节点的下一个节点
pNode.next = pre; //反转链表
pre = pNode; //让prej和pNode都向后移动一位,next不用变了,因为上面会自动根据pNode获取next节点。
pNode = next;
}
return pre;
}
}