查找链表的排列

时间:2013-11-17 20:03:00

标签: java linked-list permutation

我有一个链表,我正在尝试生成所有的排列。

链接列表由ListNode个对象构成,这些对象只包含一个整数和对下一个ListNode的引用。

我正在尝试做这样的事情:

public void generatePermutatoins(ListNode head) {
      //code that generates permutations
      //let's say it finds a permutation and stores the entire list in
      //ListNode singlePermutation;
      //printList(singlePermutation);
}

我想知道是否还有递归解决方案?不过,我完全坚持任何解决方案。

2 个答案:

答案 0 :(得分:1)

是的,如果您正确定义问题,可以轻松递归 您有一个链接列表和对列表的head的引用。你有一个函数递归地创建头之后所有元素的所有排列 获得结果后,您将检查每个排列,然后在每个位置添加head,生成最后一个排列。
如果你还没弄明白这就是你的递归函数。以下是Java中的骨架/伪代码,可帮助您入门。 addEachPosition(permutation, node.value);会在列表

中的所有可能的位置添加值
public List<List<Integer>> getPermutations(ListNode currentNode) {  
       if(currentNode == null) {  
             return new ArrayList<ListNode>();  
       }   
       List<List<Integer>> nextPermutations = getPermutations(currentNode.next);  
       addToPermutations(currentNode, nextPermutations);  
       return nextPermutations;  
}  

public void addToPermutations(ListNode node, List<List<Integer>> permutations) {  
   for(List<Integer> permutation:permutations) {  
      addEachPosition(permutation, node.value);        
   }  
}  

答案 1 :(得分:0)

这种非递归(迭代)实现可能会有所帮助:Collections2.permutations