题目
题解一:双指针
/**
* 双指针
* @param head
* @return
*/
public static ListNode reverseList1(ListNode head) {
//申请节点,pre和 cur,pre指向null
ListNode pre = null;
ListNode cur = head;
ListNode tmp = null;
while(cur!=null) {
//记录当前节点的下一个节点
tmp = cur.next;
//然后将当前节点指向pre
cur.next = pre;
//pre和cur节点都前进一位
pre = cur;
cur = tmp;
}
return pre;
}
题解二:递归
/**
* 递归
* @param head
* @return
*/
public static ListNode reverseList(ListNode head) {
//递归结束条件
if (head == null || head.next==null) {
return head;
}
//直接找出最后一个节点
ListNode lastNode = reverseList(head.next);
//将最后一个节点指向倒数第二个节点
head.next.next = head;
//断链
head.next = null;
return lastNode;
}