链表定义
链表是串型的数据结构,每个结点中存储当前结点的信息(值)及指向下一个结点的地址,从而将所有数据串联。
代码实现方式(from LeetCode):
class ListNode {
int val;
ListNode next;
ListNode() {
}
ListNode(int val) {
this.val = val;
}
ListNode(int val, ListNode next) {
this.val = val;
this.next = next;
}
}
习题解决
一般来说,链表的题目都比较直接,少有多余的算法,主要就是考察对该数据结构的了解程度。
通常来说,要处理一个链表,要新建一个指向当前结点地址的变量,如currentNode
,一开始使其指向链表的开头(或根据题意自定义),然后遍历并处理数值。要注意的是,currentNode
指向的是当前的结点,其被修改不会导致之前的结点被修改到,只会改变原链表在currentNode
位置开始的所有结点。
相关代码
在LeetCode刷题中,发现测试用例在本地idea中不好构造,故自己写几个方法,方便以后在idea中可以自由添加测试用例和调试。
1. 展示链表
public static void showListNode(ListNode listNode) {
if (listNode == null) return;
while (listNode.next != null) {
System.out.print(listNode.val + " -> ");
listNode = listNode.next;
}
System.out.println(listNode.val);
}
示例: 0 -> 1 -> 2 -> 3 -> 4 -> 5
2. 将数组转换成链表
public static ListNode buildLinkedList(int[] list) {
if (list.length == 0) return null;
ListNode listNode = new ListNode(list[0]);
ListNode currentNode = listNode;
for (int i = 1; i < list.length; i++) {
currentNode.next = new ListNode(list[i]);
currentNode = currentNode.next;
}
return listNode;
}
有这两个方法就不用买官网上的在线调试功能了~