leetcode206反转单链表
题目描述
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例:
一、迭代法
开辟指针prev,cur,next,如下:
将cur指向prev,然后分别将指针向后移动,当cur指针指向null时,整个链表完成反转。代码如下:
public ListNode reverseList(ListNode head) {
ListNode prev = null;
ListNode cur = head;
while (cur != null) {
ListNode next = cur.next;
curr.next = prev;
prev = cur;
cur = next;
}
return prev;
}
二、递归法
不断向下传递,当遇到节点为null或者下一个节点为null时,完成归并。
此时只返回一个结点,用节点p存储当前节点,当链表长度为2时,将头节点的下一个节点的下一个节点指向头结点,即:head.next.next = head;将头结点的下一个节点指向空,head.next = null;最终返回链表P;
代码如下:
public ListNode reverseList(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode p = reverseList(head.next);
head.next.next = head;
head.next = null;
return p;
}