精华内容
下载资源
问答
  • 翻转链表

    2019-10-05 12:26:46
    翻转链表翻转链表 翻转链表 思想:使用三个指针pre,cur,np 每次指针顺序移动后,pre结点被正确归位,while循环之后的状态见下图: class Solution { public: ListNode* reverseList(ListNode* head) { if (head...

    翻转链表

    翻转链表

    思想:使用三个指针pre,cur,np
    每次指针顺序移动后,pre结点被正确归位,while循环之后的状态见下图:
    在这里插入图片描述

    class Solution {
    public:
        ListNode* reverseList(ListNode* head) {
            if (head == nullptr || head->next == nullptr)
            {
                return head;
            }
            ListNode* pre = nullptr;
            ListNode* cur = head;
            ListNode* np = head->next;
            while (np != nullptr)
            {
                cur->next = pre;
                pre = cur;
                cur = np;
                np = np->next;
            }
            // cur 还未完成翻转
            cur->next = pre;
            return cur;
        }
    };
    
    展开全文
  • 翻转 链表

    2021-05-31 13:56:31
    翻转链表1. 题⽬描述2. 问题分析3. 代码 1. 题⽬描述 剑指 offer:输⼊⼀个链表,反转链表后,输出链表的所有元素。 2. 问题分析 这道算法题,说直⽩点就是:如何让后⼀个节点指向前⼀个节点!在下⾯的代码中定义了⼀...

    1. 题⽬描述

    剑指 offer:输⼊⼀个链表,反转链表后,输出链表的所有元素。

    2. 问题分析

    这道算法题,说直⽩点就是:如何让后⼀个节点指向前⼀个节点!在下⾯的代码中定义了⼀个next 节点,该节点主要是保存要反转到头的那个节点,防⽌链表 “断裂”。

    3. 代码

    public class ListNode {
        int val;
        ListNode next = null;
    
        ListNode(int val) {
            this.val = val;
        }
    
        @Override
        public String toString() {
            return val+"->"+next;
        }
    }
    
    public class ReverseList {
        public static void main(String[] args) {
            ListNode a = new ListNode(1);
            ListNode b = new ListNode(2);
            ListNode c = new ListNode(3);
            ListNode d = new ListNode(4);
            ListNode e = new ListNode(5);
            a.next = b;
            b.next = c;
            c.next = d;
            d.next = e;
            System.out.println(a);
            System.out.println(reverseList(a));
        }
    
        private static ListNode reverseList(ListNode head) {
            ListNode next=null;
            ListNode pre=null;
            ListNode curr=head;
            while (curr!=null){
                //保存下一个节点
                next=curr.next;
                //当前节点指向上一个节点(第一次的时候指向空)
                curr.next=pre;
                //移动到上一个节点(第一次的话,就是从null节点移动到head头结点)
                pre=curr;
                //现在要操作的位置,就是移动到下一个节点(第一个的话,就是从头结点移动到头结点的下一个节点)
                curr=next;
            }
            return pre;
        }
    }
    
    
    1->2->3->4->5->null
    5->4->3->2->1->null
    
    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,897
精华内容 9,158
关键字:

翻转链表