在一些笔试中看到了这个题目,所有记录一下相关的实现逻辑。
实现反转链表目前个人想到的是两个办法:
- 遍历(简单粗暴)
- 递归
一 遍历
1.1 源码
public ListNode reverseList(ListNode node){
ListNode head = null;
ListNode next = null;
while(node!=null){
next = node.next;
node.next = head;
head = node;
node = next;
}
return head;
}
1.2 实现逻辑
这里1→2→3→4为例,当节点node不为空时进行遍历,遍历中的操作如下:
next = node.next
node.next = pre
pre = node
node =next;

第一次遍历后

第二次遍历

第三次遍历

第四次遍历,此时node为空,遍历结束,返回节点head

二 递归
2.1 源码
public ListNode reverseList(ListNode node){
if(node==null||node.next==null){
return node;
}
ListNode temp = node.next;
ListNode newNode = reverseList(node.next);
temp.next = node;
node.next=null;
return newNode;
}
2.2 实现逻辑
进行递归,层层包裹,将链表反转
| 递归层数 | ↓ | ↑ |
|---|---|---|
| 1 | ![]() | ![]() |
| 2 | ![]() | ![]() |
| 3 | ![]() | ![]() |
| 4 | ![]() |
本文详细介绍了两种链表反转的方法:遍历与递归,并通过源码解析了每种方法的具体实现逻辑。







323

被折叠的 条评论
为什么被折叠?



