剑指Offer算法题

一、链表

1、从尾到头打印链表

使用栈先进后出

class Solution {
    public int[] reversePrint(ListNode head) {
        //将链表数据依次放到栈中
        Stack<ListNode> stack = new Stack<ListNode>();
        ListNode p= head;
        while (p!= null) {
            stack.push(p);
            p= p.next;
        }

        //将栈中的数弹出放到数组中
        int size = stack.size();
        int[] print = new int[size];
        for (int i = 0; i < size; i++) {
            print[i] = stack.pop().val;
        }
        return print;
    }
}

2、删除链表的节点

class Solution {
    public ListNode deleteNode(ListNode head, int val) {
        //删除时添加dummy头节点,方便修改头节点
        ListNode dummy = new ListNode(-1);
        dummy.next=head;
        ListNode p=dummy;
        //找到值为val的节点
        while(p.next.val!=val){
            p=p.next;
        }
        //执行删除操作
        p.next=p.next.next;
        //返回dummy的下个节点
        return dummy.next;
        
    }
}

3、链表中倒数第k个节点

 

上一篇:【Leetcode-每日一题】链表随机节点


下一篇:[LeetCode] 92. Reverse Linked List II