题目描述
反转单向链表
解题思路
很简单面试很常问的题目。解法有两种,递归法和头插法。
递归法:先将头结点反转,头结点的next指向null,再将头结点的下一个节点链表反转,最后头结点的下一个节点指向头结点。
public ListNode reverseList(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode next = head.next;
head.next = null;
ListNode res = reverseList(next);
next.next = head;
return res;
}
头插法:构造一个虚拟的头结点,将链表的每一个节点插入到dummy节点的next节点,最后返回dummy.next。
public ListNode reverseList(ListNode head) {
ListNode dummy = new ListNode(-1);
while (head != null) {
ListNode next = head.next;
head.next = dummy.next;
dummy.next = head;
head = next;
}
return dummy.next;
}