在力扣上做了道反转链表的题,因为题目上只要求实现链表反转,提交后自动输入验证参数,所以我写了段验证程序,可以输入任意个数的链表元素,翻转链表后将元素输出;
定义了一个节点类ListNode;
package Demo;
public class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x;}
public void addNode(ListNode newNode) { //定义一个递归方法用于添加节点
if(this.next == null) {
this.next = newNode;
} else {
this.next.addNode(newNode);
}
}
}
然后定义了一个处理类Solution;
package Demo;
public class Solution {
//翻转链表
public ListNode reverseList(ListNode head) {
ListNode prev = null;
ListNode curr = head;
while(curr != null) {
ListNode nextTemp = curr.next;
curr.next = prev;
prev = curr;
curr = nextTemp;
}
return prev;
}
//输入链表
public ListNode inputList(int ...data) { //用了方法的可变参数
ListNode listHead = null; //头结点
for(int temp : data) {
ListNode newNode = new ListNode(temp);
if(listHead == null) {
listHead = newNode;
} else {
listHead.addNode(newNode);
}
}
return listHead;
}
//输出链表
public void printList(ListNode last) {
while(last != null) {
System.out.print(last.val + ",");
last = last.next;
}
System.out.println();
}
}
主方法:
package Demo;
public class Hello {
public static void main(String [] args) {
Solution s = new Solution();
ListNode last = s.reverseList(s.inputList(1,2,3,4,5,6,7));
s.printList(last);
}
}
输出结果:
总结:在翻转链表的基础上增加了链表的输入输出,输出方法不是太复杂,按照头节点向后逐个节点输出数据就行;输入方法的话,之前看别人的验证的时候是逐个节点输入数据,我感觉那样比较麻烦,虽然说只是为了验证不用输入很多测试用例,但是直接输入一串数字让程序自行插入链表感觉舒服很多,顺便也巩固了一下可变参数,foreach,递归调用这些知识的用法;
改进:上面的程序只能支持整型数据输入,要在链表里保存其他数据的类型的话还要想想更好的办法