链表:反转链表

  • 需求理解
    • 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;
        }
    
    }
      
原文地址:https://www.cnblogs.com/nightOfStreet/p/13027224.html