版权声明:转载请注明原文地址。 https://blog.csdn.net/qq_39240270/article/details/88547558
题目描述
将单链表反转
解决
- 迭代
每次将后一个节点的next指针指向前一个节点,要使用一个中间指针保存当前节点,避免出现内存泄漏
代码:
//迭代实现
public ListNode reverseList(ListNode head) {
if (head == null || head.next == null)
return head;
ListNode prev = head;//原链表的头指针
ListNode current = head.next;//用于指向下一个指针
ListNode temp = head;//用于存储当前节点
while(current != null){
//将当前节点的next指针指向前一个节点
temp = current;
temp.next = prev;
//继续向后迭代
prev = temp;
current = current.next;
}
head.next = null;
return temp;
}
- 递归
要使当前节点的next指针指向前一个节点,先使当前节点的下一个节点的next指针指向该节点
代码:
//递归实现
public ListNode reverseList(ListNode head) {
//递归出口
if(head == null || head.next == null)
return head;
ListNode newNode = reverseList(head.next);
//将下一个节点的next指针指向前一个节点
head.next.next = head;
head.next = null;
return newNode;
}