역순으로 단일 체인 테이블
2660 단어 검지offer
제목 설명
체인 테이블을 입력하여 체인 테이블을 반전시킨 후 체인 테이블의 모든 요소를 출력합니다.
public class HeapPrint {
public static ListNode ReverseList(ListNode head) {
if (head == null||head.next == null) {
return head;
}
ListNode q = head.next;
ListNode ph = ReverseList(q);
q.next = head;
head.next = null;// , , ,
System.out.println("ph:"+ph.val);
return ph;
}
public static void main(String[] args) {
ListNode p1=new ListNode(1);
ListNode p2=new ListNode(2);
ListNode p3=new ListNode(3);
ListNode p4=new ListNode(4);
p1.next=p2;
p2.next=p3;
p3.next=p4;
ListNode head=ReverseList(p1);
while(head!=null){
System.out.println(head.val);
head=head.next;
}
}
}
class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
출력:ph:4
ph:4
ph:4
4
3
2
1
이 문제를 시작하는 것은 정말 어리석다. 순서로 하는 것은 사실 매우 간단하다.하지만 차례대로 해서 솔직히 이해가 안 돼서 적어서 디버깅을 해봤어요.귀환의 함수는 매번 돌아오는 것이 다르다고 생각했는데, 매번 같은 1->2->3->4를 호출한 후에 마지막을 되돌릴 줄은 생각지도 못했다. 다른 것은 모두 비교적 이해하기 쉽다.그리고head.next = null;
이 말은 사실 1이라는 노드에만 효과가 있다.두 번째 방법은 내가 쓴 것으로 사유상 비교적 전통적이다
public class HeapPrint2 {
static ListNode newHead;
public static ListNode ReverseList(ListNode head) {
if (head == null)
return head;
ListNode returnV=Reverse(head);
returnV.next=null;
return newHead;
}
public static ListNode Reverse(ListNode head) {
if (head.next == null) {
newHead = head;
return head;
}
ListNode tmp;
tmp = Reverse(head.next);
System.out.println("tmp:"+tmp.val);
tmp.next = head;
return head;
}
public static void main(String[] args) {
ListNode p1 = new ListNode(1);
ListNode p2 = new ListNode(2);
ListNode p3 = new ListNode(3);
ListNode p4 = new ListNode(4);
p1.next = p2;
p2.next = p3;
p3.next = p4;
ReverseList(p1);
ListNode head = newHead;
while (head != null) {
System.out.println(head.val);
head = head.next;
}
}
}
셋째, 일반 역순 인쇄
public class ReversePrint {
public static void ReversePrint(ListNode head){
if(head.next==null){
System.out.println(head.val);
return;
}
ReversePrint(head.next);
System.out.println(head.val);
}
public static void main(String[] args) {
ListNode p1 = new ListNode(1);
ListNode p2 = new ListNode(2);
ListNode p3 = new ListNode(3);
ListNode p4 = new ListNode(4);
p1.next = p2;
p2.next = p3;
p3.next = p4;
ReversePrint(p1);
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
20200326 - 검지offer 면접문제 27: 두 갈래 나무의 거울이솔 위 안에 28문제의 답안이 있는데 어떻게 꼬치는지 모르겠다.간단해....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.