Java 一维数组转换链表结构
最近在 Leetcode 刷题,发现遇到不少链表类型的题目,题目会定义好链表节点 ListNode 的数据结构。
ListNode
ListNode 的数据结构如下:
public class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
在题目的示例中,二叉树的输入都是一个一维数组,表示这个二叉树结构。
例如:
输入:root = [1,2,4]
表示的链表为:
因此在 IDE 里面编码调试时,需要一个转化方法方便自己编写并运行测试用例。
转换链表
一维数组转换链表结构:
public class TreeNodeUtil {
/**
* 一维数组转换链表结构
* @param array
* @return
*/
public static ListNode arrayToListNode(Integer[] array) {
if (array.length == 0) {
return null;
}
ListNode root = new ListNode(array[0]);
ListNode other = root; //生成另一个节点,并让other指向root节点,other在此作为一个临时变量,相当于指针
for (int i = 1; i < array.length; i++) { //由于已给root赋值,所以i从1开始
ListNode temp = new ListNode(array[i]); //每循环一次生成一个新的节点,并给当前节点赋值
other.next = temp; //将other的下一个节点指向生成的新的节点
other = temp; //将other指向最后一个节点(other的下一个节点) other=other.getNext();
}
return root;
}
}
使用方式:
ListNodeUtil.arrayToListNode(new Integer[]{1,2,4});
测试用例
打印链表
ListNode p = ListNodeUtil.arrayToListNode(new Integer[]{1,2,4});
ListNodeUtil.print(p);
其中:
public static void print(ListNode node) {
while (node != null) {
System.out.print(node.val + ",");
node = node.next;
}
System.out.println("");
}
比较链表
ListNode p = new ListNode(1,new ListNode(2,new ListNode(4,null)));
ListNode q = ListNodeUtil.arrayToListNode(new Integer[]{1,2,4});
System.out.println(ListNodeUtil.isSameListNode(p,q));
其中:
public static boolean isSameListNode(ListNode p, ListNode q) {
if (p == null || q == null) {
return p == q;
}
return p.val == q.val && isSameListNode(p.next, q.next);
}
相关文章