검지는 Offer 면접문제 16 반전 체인표(귀속과 비귀속), 면접문제 17 두 순서의 체인표(귀속)를 합친 것을 말한다.
2828 단어 Virtual Offer Java Edition
면접문제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