검지는 Offer 면접문제 16 반전 체인표(귀속과 비귀속), 면접문제 17 두 순서의 체인표(귀속)를 합친 것을 말한다.

면접문제16: 반전 체인표(귀속과 비귀속)


체인 시계의 두결점을 입력하여 이 체인 시계를 반전시키고 반전된 체인 시계의 두결점을 출력합니다.
사고방식1: 세 개의 지침을 정의하는데 그것이 바로 현재 반전시킬 결점, 그것의 앞의 결점과 뒤의 결점이다.
사고방식 2: 역귀착.먼저 꼴찌를 찾은 후 두 결점이 반전되어 순서대로 앞으로 간다.
다음은 이 Java 구현입니다.
class ListNode{
	int value;
	ListNode next;
	public ListNode(int x) {
		value = x;
	}
}
public class ReverseList {
	private ListNode reverseList(ListNode headNode){
		if(headNode == null){
			System.out.println(" ");
			return null;
		}
		ListNode nowNode = headNode;// 
		ListNode preNode = null;// 
		ListNode nextNode = null;// 
		ListNode revHead = null;// 
		while(nowNode != null){
			if(nowNode.next == null){// 
				revHead = nowNode;
			}
			nextNode = nowNode.next;
			nowNode.next = preNode;
			preNode = nowNode;
			nowNode = nextNode;
		}
		return revHead;
	}
	private void print(ListNode headNode){
		if(headNode == null){
			System.out.println(" ");
			return;
		}
		while(headNode != null){
			System.out.println(headNode.value);
			headNode = headNode.next;
		}
	}
	// ( )
	private ListNode digui(ListNode headNode){
		// 
		if(headNode == null || headNode.next == null){
			return headNode;
		}else{
			ListNode revHead = digui(headNode.next);// 
			headNode.next.next = headNode;// 
			headNode.next = null;
			return revHead;
		}
	}
	public static void main(String[] args) {
		ListNode one = new ListNode(1);
		ListNode two = new ListNode(2);
		ListNode three = new ListNode(3);
		one.next = two;
		two.next = three;
		ReverseList test = new ReverseList();
		System.out.println(" :");
		test.print(one);
		System.out.println(" :");
		//test.print(test.reverseList(one));
		test.print(test.digui(one));
	}
}

면접문제17: 두 개의 순서를 합친 체인표(귀속)


두 개의 점차적으로 증가하는 체인 시계를 입력하고, 이 두 개의 체인 시계를 합쳐서, 새 체인 시계는 여전히 점차적으로 증가한다.
사고방식: 귀착.매번 두 체인 테이블의 첫 번째 결점을 비교하고 작은 것을 제시한 다음에 그next는 귀환 반환값과 같다.
이 Java는 다음과 같습니다.
public class Merge {
	private ListNode merge(ListNode L1,ListNode L2){
		if(L1 == null){
			return L2;
		}else if(L2 == null){
			return L1;
		}
		ListNode mergeHead = null;
		if(L1.value < L2.value){
			mergeHead = L1;
			mergeHead.next = merge(L1.next, L2);
		}else{
			mergeHead = L2;
			mergeHead.next = merge(L1, L2.next);
		}
		return mergeHead;
	}
	// 
	private ListNode create(int[] arr){
		if(arr.length == 0){
			System.out.println(" ");
			return null;
		}
		ListNode headNode = new ListNode(arr[0]);
		ListNode p = headNode;
		for(int i= 1;i

좋은 웹페이지 즐겨찾기