안전 서비스를 증명 : 목록 상호 k 번째 노드 (이중 포인터)

주제 :

입력 연결리스트의 연결 목록 출력 역수 k 번째 노드.

답변 :

해결 방법 1 :

먼저 ArrayList에에 목록을 연결 한 다음 K의 끝에서 두 번째 코드를 얻을 수는 다음과 같습니다

/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/

import java.util.ArrayList;
public class Solution {
    public ListNode FindKthToTail(ListNode head,int k) {
        if(head==null){
            return null;
        }
        ArrayList<ListNode> list = new ArrayList<ListNode>();
        while(head!=null){
            list.add(head);
            head = head.next;
        }
        if(k<1||k>list.size()){
            return null;
        }
        return list.get(list.size()-k);

    }
}

해결 방법 2 :

더블 포인터 방법, 빠른 속도 느린 끝에서 두 번째 위치 k에 도달하는 빠른이 같은 다음에 올 때 느린 k 번째 위치가 null는보다 :

public class Solution {
    public ListNode FindKthToTail(ListNode head,int k) {
        if(head==null){
            return null;
        }
        ListNode fast = head;
        ListNode slow = head;
        int i=0;
        while(i<k){
            if(fast==null){
                return null;
            }
            fast = fast.next;
            i++;
        }
        while(fast!=null){
            fast = fast.next;
            slow = slow.next;
        }
        return slow;
    }
}

 

게시 92 개 원래 기사 · 원 찬양 2 · 조회수 8415

추천

출처blog.csdn.net/wyplj2015/article/details/104859121