反转链表
题目描述
输入一个链表,反转链表后,输出新链表的表头。
题目解析
我们对链表进行操作,一定要思路清晰
首先将当前节点pNode的下一个节点保存起来,为pNext;
***如果这个节点为空,那么相当于遍历到最后了,就将pNode赋值给newNode,将newNode返回即可。
***如果这个节点不为空,那么先将当前节点pNode的下一个节点设置为前一个节点pPrev,再将当前节点pNode设置为前一个节点,最后将pNext设置为当前节点。
代码解析
public ListNode ReverseList(ListNode head) {
//判断头结点是否为空
if(head==null) {
return null;
}
ListNode newHead = null;
ListNode pNode = head;
ListNode pPrev = null;
//判断是否到最后一个节点
while(pNode!=null){
ListNode pNext = pNode.next;
//若到大最后一个节点,则将现在的这个节点赋值给新的头结点
if(pNext==null) {
newHead = pNode;
}
//将当前节点变为前一个节点,下一个节点变为当前节点,也就是三个节点换位置
//将pPrev-->pNode-->pNext(pNode.next)转变为pPrev<--pNode<--pNext(pNode.next)
pNode.next = pPrev;
pPrev = pNode;
pNode = pNext;
}
return newHead;
}