非递归方法
public ListNode ReverseList(ListNode head) {
// q,当前指针;
// p,当前指针的前一个节点
// cur,保存当前指针下一个节点,中间变量
ListNode p = null, q = head, cur = head;
if(head == null || head.next == null){
return head;
}
// 当q为null,表示走到尾部,p正好指向最后一个节点
while(q != null){
cur = q.next; // 链表断开保存断开位置的下一节点
q.next = p;
p = q;
q = cur;
}
return p;
}
递归方法
public ListNode ReverseList(ListNode head) {
//若链表为空或只有一个元素
if(head == null || head.next == null){
return head;
}else{
// 先反转后面的链表,走到链表的末端节点
ListNode res = ReverseList(head.next);
// 再将当前节点设置为后面节点的后续节点;
head.next.next = head;
head.next = null;
return res;
}
}