输入一个链表,反转链表后,输出链表的所有元素。
思路:定义三个指针,分别指向当前遍历的节点、它的前一节点及后一节点,为了防止链表断开。
测试用例:
功能测试:
1、输入的链表含有多个节点
2、输入的链表只有一个节点
特殊输入测试:
1、链表头节点为null指针。
package cn.com.jianzhioffer;
public class Solution16 {
public static class ListNode {
int val;
ListNode next = null;
public ListNode(int val) {
this.val = val;
}
}
public static ListNode reverseList(ListNode head){
//head为当前节点,如果当前节点为空的话,那就什么也不做,直接返回null;
if(head == null) return null;
ListNode prReverseHead = null;
ListNode pNode = head;
ListNode pPre = null;
//做循环,如果当前节点不为空的话,始终执行此循环,此循环的目的就是让当前节点从指向next到指向pPre
//如此就可以做到反转链表的效果
//先用pNext保存pNode的下一个节点的信息,保证单链表不会因为失去pNode节点的原pNext节点而就此断裂
while(pNode!=null){
ListNode pNext = pNode.next;
if(pNext == null){//已经到了尾部了
prReverseHead = pNode;
}
pNode.next = pPre;
pPre = pNode;
pNode = pNext;
}
return prReverseHead;
}
}