LeetCode反转链表的方式有哪些
1. 迭代法
迭代法是一种常见且简洁的解法。具体操作如下:
1)定义三个指针:pre指向前一个节点,cur指向当前节点,next指向下一个节点。
2)在迭代过程中,改变节点之间的指向关系,使当前节点指向前一个节点。
3)根据条件判断是否继续迭代,直至链表尾节点为null。
// 迭代法
public ListNode reverseList(ListNode head) {
ListNode pre = null;
ListNode cur = head;
while (cur != null) {
ListNode next = cur.next;
cur.next = pre;
pre = cur;
cur = next;
}
return pre;
}2. 递归法
递归法是将问题拆解成子问题来解决,解决子问题后再逐步返回结果。
具体步骤如下:
1)递归到链表的末尾节点,将其作为新的头节点返回。
2)递归返回时,将当前节点的下一个节点指向当前节点。
3)通过递归的方式不断改变指向关系,完成链表的反转。
// 递归法
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;
}3. 头插法
头插法是一种常用的反转链表的方法,也是迭代法的一种变形。
具体步骤如下:
1)定义一个新的空节点dummy,作为新链表的头节点。
2)迭代遍历原链表的所有节点,将每个节点插入到dummy节点之后,从而实现链表反转。
3)返回dummy节点的下一个节点,即为反转后的链表头节点。
// 头插法
public ListNode reverseList(ListNode head) {
ListNode dummy = new ListNode(-1);
while (head != null) {
ListNode temp = head.next;
head.next = dummy.next;
dummy.next = head;
head = temp;
}
return dummy.next;
}以上是三种常用的反转链表的方法,迭代法、递归法和头插法。每种方法各有特点,可以根据实际情况选择适合的方法来解决问题。
本文由轻山版权所有,禁止未经同意的情况下转发
上一篇
怎么为CDSW的数据目录扩容 猜您想看
-
如何在Steam平台上查找其他用户的游戏免费试玩?
如何在Stea...
2023年04月17日 -
mimikatz怎么利用zerologon攻击域控服务器
1.什么是Ze...
2023年05月25日 -
JDK线程的基本协作机制wait和notify怎么用
一、wait和...
2023年05月22日 -
如何进行mysql innodb_log_file_size 查询和修改
查询innod...
2023年07月20日 -
C++11中final说明符的用法
一、什么是C+...
2023年05月26日 -
Python如何爬取美团美食数据
1、爬取美团美...
2023年05月22日