单链表的反转
这里我们采用的是只遍历一遍单链表实现反转
public void swap() {
if(this.head==null){//首先判断单链表里面有没有节点
System.out.println("单链表里面没有数字");
return;
}
NODE prev = this.head;
NODE cur = prev.next;
if(cur!=null) {
NODE del = cur.next;
prev.next = null;
while(cur!=null) {
cur.next = prev;
prev = cur;
cur = del;
if(del!=null) {
del = del.next;
}
}
this.head = prev;
}
}
}
方法总结:
首先判断单链表是否为空,不为空的话,把头节点赋值给prev作为前驱,再把prev.next赋值给cur,让cur来进行反转,然后需要添加判断条件cur是否为空,为空的话代表只有一个节点,就不用继续执行下面的代码。不为空的话,把cur.next赋值给del。让del来控制cur和prev往后走。当cur为null的时候,代表全部反转完了。所以这个就是循环的退出条件。需要注意的是del变为null的时候,cur此时还不为null,还要再进入循环,此时需要添加条件del!=null,不然del会空指针异常。