- 需求理解
- a->b->c->d->null
- 链表节点数据结构
-
ListNode{ String a ; ListNode next; }
-
反转链表就是改变每个节点的next指向的引用
- 思路
- 遍历链表节点,每个节点指针指向前一个节点:需要一个临时变量存储上一个节点的引用
- code
-
package club.interview.linkedList; import club.interview.linkedList.base.ListNode; /** * 1. 逆序打印链表 - 建议使用栈(不改变链表) * 2. 反转链表 - 使用双指针(不使用额外空间) * 双指针,思路要记住 https://leetcode-cn.com/problems/reverse-linked-list/ * <p> * null -> 1 -> 2 -> 3 -> 4 * * @author QuCheng on 2020/4/6. */ public class Reverse { private ListNode reverse(ListNode listNode) { // 双指针,转换思路一定要理清 ListNode result = null; while (listNode != null) { // 临时保存next ListNode next = listNode.next; // 反转当前节点的next listNode.next = result; // 完成当前节点的替换 result = listNode; // 准备下一个节点 listNode = next; } return result; } }