Day11_剑指Offer

Day11_剑指Offer

package com.sorrymaker.day3511;

import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

/**
 * 输入: head = [4,5,1,9], val = 5
 * 输出: [4,1,9]
 * 解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.
 * @Author nextGame
 * @Date 2021/8/22 22:41
 * @Version 1.0
 */
public class DeleteNode {

    public class ListNode {
        int val;
        ListNode next;

        ListNode(int x) {
            val = x;
        }
    }


    public ListNode deleteNode(ListNode head, int val) {
        //头节点 == val ,那就直接返回head.next ,删掉头节点。
        if (head.val == val) {
            return head.next;
        }
        ListNode pre = head, cur = head.next;
        //当 cur = head.next == null的时候,就是遍历完整个链表了,就可以跳出循环了
        // 因为已经把头节点判定过了,现在是head.next.val == val的时候,就可以定位到要删除的节点了。
        while (cur != null && cur.val != val) {
            //让 pre = cur ,遍历完链表边,这里等于两个指针了,一前一后。
            pre = cur;
            cur = cur.next;
        }
        //当不是因为cur ==null 而结束循环的话,说明,存在需要删除的节点,
        //这里就用pre .next = cur.next 。来删除这个val。
        //原本pre.next 应该是cur 。 而cur现在是需要删除的节点,所以直接跳过cur,指向cur.next,间接删除。
        if (cur != null) {
            pre.next = cur.next;
        }
        return head;
    }
}
package com.sorrymaker.day3511;

/**
 * 输入一个链表,输出该链表中倒数第k个节点。
 * 为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。
 *
 * @Author nextGame
 * @Date 2021/8/22 23:03
 * @Version 1.0
 */
public class GetKthFromEnd {

    public class ListNode {
        int val;
        GetKthFromEnd.ListNode next;

        ListNode(int x) {
            val = x;
        }
    }

    public ListNode getKthFromEnd(ListNode head, int k) {
        //双指针。
        ListNode pre =head,cur = head;
        //先走k步,
        for (int i = 0; i < k; i++) {
            // 考虑k 比链表大的情况下。
            if(cur == null) {
                return null;
            }
            cur = cur.next;
        }
        //当cur==null的时候,说明pre已经到了倒数第k个节点。因为 cur 比pre快k步,
        while (cur!=null){
            pre = pre.next;
            cur =cur.next;
        }
        return pre;
    }
}
posted @ 2021-08-22 23:23  独眼龙  阅读(30)  评论(0)    收藏  举报