2016-12-25 75 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

相关问题