LinkedList专题1

237 Delete Node in a Linked List

思路:单向链表,只给定要删除的节点。怎么删除这个节点。参考。例如要删除节点node。一般来说我们需要将node.preNode.next = node.next。但是现在没有node的上一个节点。代替方案是修改当前节点为node.next节点。

    node.val = node.next.val;
    node.next = node.next.next;

206 Reverse Linked List

思路:逆转LinkedList,也是单向的。每new一个节点,将当前节点设置为头节点,上一个节点设置为当前节点的next。

    public ListNode reverseList(ListNode head) {
        if(head==null) return null;
        ListNode node = head;
        ListNode newNode = new ListNode(node.val);
        while(node.next!=null){
           node = node.next;
           ListNode newHead = new ListNode(node.val);
           newHead.next = newNode;
           newNode = newHead;
        }
        return newNode;
    }

学习:不创建新的node,修改原节点的next为上一个节点。参考链接

21. Merge Two Sorted Lists

思路:有些题你知道该怎么做,就是不会写代码。
代码

234. Palindrome Linked List

学习:这道题目的思路是比较简单的。对于单向列表的难点,往往就是就是如何找到一个节点的上一个节点。这个根据不同要求解决方法不同。
本题思路是1 查找到LinkedList的一半;2 把后一部分逆转;3 比较两部分是否相同。这里的细节就是注意当list长度为奇数的时候。
1 查找到LinkedList的一半,使用快慢指针;
2 把后一部分逆转:在前面做过;
3 比较相同,就简单了。
代码

猜你喜欢

转载自blog.csdn.net/flying_all/article/details/79937279