java nodelist 快速排序,【Leetcode】Sort List in java,你绝对想不到我是怎么做的^^我写完过了我自己都觉得好jian~...

Sort a linked list inO(nlogn)

time using constant space complexity.

大家看完题目估计跟我一样啦。。。都在想哪些是nlogn啊~快速排序、归并排序、堆排序!然后开始愁,这些东西变成list了可怎么办啊。。。

可是我深深地记得在CMU的时候老师告诉我,java现在自带的Arrays.sort用的是快排,然后我就想,那么……为什么不把list转成array然后排完了放回去呢!

于是我就用一个arraylist先装这个list,然后再把arraylist转成array去sort,然后把结果再存进一个linkedlist返回头结点~写到这里自己都想乐了,又笨又好玩的方法~

不说了,直接上代码~已通过leetcode测试~附带测试main函数

import java.util.ArrayList;

import java.util.Arrays;

public class sortList {

public static void main(String args[]){

sortList dp = new sortList();

ListNode head = new ListNode(3);

ListNode p1 = new ListNode(2);

head.next=p1;

ListNode p2 = new ListNode(1);

p1.next = p2;

ListNode p3 = new ListNode(5);

p2.next = p3;

ListNode p4 = new ListNode(4);

p3.next = p4;

prinf(head);

prinf(dp.sortList(head));

}

private static void prinf(ListNode input){

while(input!=null){

System.out.print(input.val+"->");

input = input.next;

}

System.out.println();

}//下面犯贱开始

public ListNode sortList(ListNode head) {//建议大家换个方法名或者class名,我这里重复了

if(head==null) return head;

ArrayList arr = new ArrayList();

int j=0;

ListNode p= head;

while(p!=null){

arr.add(p.val);

p=p.next;

}

Object[] array = arr.toArray();

Arrays.sort(array);//其实只有这一步。。。

ListNode start= new ListNode(0);

ListNode q = start;

for(int i=0;i

q.val=(Integer) array[i];

if(i==array.length-1){q.next = null;break;}

ListNode k = new ListNode(0);

q.next=k;

q=k;

}

return start;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然可以,以下是一个简单的 Java 通用树结构转换工具类: ```java import java.util.ArrayList; import java.util.List; public class TreeUtils { /** * 将通用树结构转换为指定类型的树结构 * * @param sourceList 原始树结构列表 * @param rootId 根节点 ID * @param builder 转换器 * @param <T> 目标树结构节点类型 * @return 目标树结构列表 */ public static <T extends TreeNode> List<T> convertTree(List<? extends TreeNode> sourceList, String rootId, TreeBuilder<T> builder) { List<T> targetList = new ArrayList<>(); for (TreeNode sourceNode : sourceList) { if (rootId.equals(sourceNode.getParentId())) { T targetNode = builder.build(sourceNode); targetNode.setChildren(getChildren(sourceNode.getId(), sourceList, builder)); targetList.add(targetNode); } } return targetList; } /** * 获取指定节点的子节点列表 * * @param parentId 父节点 ID * @param sourceList 原始树结构列表 * @param builder 转换器 * @param <T> 目标树结构节点类型 * @return 子节点列表 */ private static <T extends TreeNode> List<T> getChildren(String parentId, List<? extends TreeNode> sourceList, TreeBuilder<T> builder) { List<T> children = new ArrayList<>(); for (TreeNode sourceNode : sourceList) { if (parentId.equals(sourceNode.getParentId())) { T targetNode = builder.build(sourceNode); targetNode.setChildren(getChildren(sourceNode.getId(), sourceList, builder)); children.add(targetNode); } } return children; } /** * 树结构节点接口 */ public interface TreeNode { /** * 获取节点 ID * * @return 节点 ID */ String getId(); /** * 获取父节点 ID * * @return 父节点 ID */ String getParentId(); } /** * 树结构节点构建器接口 * * @param <T> 目标树结构节点类型 */ public interface TreeBuilder<T extends TreeNode> { /** * 构建目标树结构节点 * * @param sourceNode 原始树结构节点 * @return 目标树结构节点 */ T build(TreeNode sourceNode); } } ``` 使用方法示例: 假设有一个 `Node` 类,表示通用树结构节点,包含 `id`、`parentId`、`name` 等属性。现在需要将 `Node` 类型的通用树结构转换为 `Menu` 类型的树结构,其中 `Menu` 类型的节点包含 `id`、`parentId`、`name`、`url` 等属性。可以按以下步骤进行转换: 1. 定义 `Menu` 类型的节点: ```java public class Menu implements TreeUtils.TreeNode { private String id; private String parentId; private String name; private String url; private List<Menu> children; // 省略 getter 和 setter 方法 } ``` 2. 定义 `Menu` 类型的节点构建器: ```java public class MenuBuilder implements TreeUtils.TreeBuilder<Menu> { @Override public Menu build(TreeUtils.TreeNode sourceNode) { Node node = (Node) sourceNode; Menu menu = new Menu(); menu.setId(node.getId()); menu.setParentId(node.getParentId()); menu.setName(node.getName()); menu.setUrl(node.getUrl()); return menu; } } ``` 3. 调用 `TreeUtils.convertTree()` 方法进行转换: ```java List<Node> nodeList = ... // 原始树结构列表 List<Menu> menuList = TreeUtils.convertTree(nodeList, "root", new MenuBuilder()); ``` 其中,`nodeList` 是原始树结构列表,`"root"` 是根节点 ID,`new MenuBuilder()` 是 `Menu` 类型的节点构建器。 希望这个工具类能对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值