反转一个单链表
public class ReverseList1 {
/**
* 两种方法:
* 迭代反转
* 递归反转
* @param head
* @return
*/
public ListNode reverseList(ListNode head) {
// 迭代反转太简单,就不写了
// 重点是递归反转,代码很简单,理解起来挺麻烦的
/**
* 这里递归的过程,结束条件是head.next == null,即当只剩下一个节点时,
* 我们不需要再往下递归了。
* 当然,还有结束条件是:如果一开始head就是null,那么我们当然也不需要进
* 行递归了,直接返回就行。
* 只剩一个节点时,将它的next置为null,就算完成了反转
* 接下来回到上一层,这一层的head.next就是刚刚那层的head,所以在这一层
* 我们只需要将head.next.next置为head,就算完成了反转。因为它后面的节
* 点都反转完成了。接下来再将head的next置为null即可。
*/
if (head == null || head.next == null) {
return head;
}
ListNode newHead = reverseList(head.next);
head.next.next = head;
head.next = null;
return newHead;
}
}
class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
原文:https://www.cnblogs.com/easternE/p/14616692.html