2016-12-25 172 views
0

下面是鏈表列表程序,我試圖通過k-節點來反轉鏈表。 k是用戶提供的輸入。但問題在於,邏輯僅以相反的順序返回前三個節點。爲什麼反轉我的鏈表不能按預期工作?

package p; 

import java.util.Scanner; 

public class LinkedListDemoReverseKNode { 

    class MyList { 

     public int info; 
     public MyList link; 
     public MyList(){ 
      this.link = null; 
     } 

    } 

    public static void main(String[] args) { 

     Scanner sc = new Scanner(System.in); 
     MyList s = new MyList(); 
     System.out.println("enter value :"); 
     s.info = sc.nextInt(); 
     Character ch = null; 

     MyList t = s; 

     MyList commonNode = null; 

     while (true) { 
      System.out.println("to create node press Y else N "); 
      ch = sc.next().charAt(0); 

      if (ch == 'n' || ch == 'N') { 
       break; 
      } 

      s.link = new MyList(); 
      System.out.println("enter value for the node :"); 
      s.link.info = sc.nextInt(); 
      s = s.link; 

     } 

     // Reverse the linked list k-node : 
     s = t; 
     LinkedListDemoReverseKNode linkedListDemo3 = new LinkedListDemoReverseKNode(); 
     MyList head = linkedListDemo3.reverseLinkedListKNode(s, 3); 
     while (head != null) { 
      System.out.println("info :: " + head.info); 
      head = head.link; 
     } 

    } 

    private MyList reverseLinkedListKNode(MyList head, int k) { 

     MyList s = head; 
     MyList prev = null; 
     MyList next = null; 
     int count = 0; 
     while (count < k && s != null) { 
      next = s.link; 
      s.link = prev; 
      prev = s; 
      s = next; 
      count++; 
     } 

     if (next != null) 
      s.link = reverseLinkedListKNode(next, k); 


     return prev; 
    } 
} 
+1

您的帖子的標題是迄今爲止最重要的決定,您將使:) –

+1

這可能是因爲您傳遞3來反轉LinkedListKNode(MyList head,int k) – Amal

回答

-1

您可以簡單地使用Collections.reverse ...

+1

LinkedListDemoReverseKNode不是Collection –

+0

對不起,標題和班級名稱讓我們認爲這是一個LinkedList – Sharcoux

+0

只需使用Collections.reverse,您將無法在面試中取得資格。 –

0
// Reverse the linked list k-node : 
    s = t; 
    LinkedListDemoReverseKNode linkedListDemo3 = new LinkedListDemoReverseKNode(); 
    MyList head = linkedListDemo3.reverseLinkedListKNode(s, 3); 
    while (head != null) { 
     System.out.println("info :: " + head.info); 
     head = head.link; 

在這行代碼,它說: MYLIST頭= linkedlistDemo3.reverselinkedlistNode(S,3) 嘗試改變它在那裏說(s,3)

+0

這不起作用,因爲我已經將k的值設置爲3. –

0

如果你看看你的代碼MyList head = linkedListDemo3.reverseLinkedListKNode(s, 3);這部分你告訴它反轉鏈表中的三個第一個節點。

的方法詢問k節點的數量被逆轉:

private MyList reverseLinkedListKNode(MyList head, int k) 

您可以設置k總節點列表中的扭轉的所有節點,或任意數量的節點扭轉。

祝你好運。

+0

我的要求是如果如果k = 3並且列表包含10-> 20-> 30-> 40,則輸出將是30-> 20 - > 10 - > 40 –

+0

我的要求是如果如果k = 3和列表包含10-> 20 - > 30 - > 40,那麼輸出將是30 - > 20 - > 10 - > 40 –

+0

@Vikasnaik行爲是否正確?這是代碼的作用。 – Carlton

相關問題