1 class Solution3 { 2 3 public ListNode removeElements(ListNode head, int val) { 4 5 ListNode dummyHead = new ListNode(-1); 6 dummyHead.next = head; 7 8 ListNode prev = dummyHead; 9 while(prev.next != null){ 10 if(prev.next.val == val) 11 prev.next = prev.next.next; 12 else 13 prev = prev.next; 14 } 15 16 return dummyHead.next; 17 }
实际在编程的时候免不了要进行调试,就要用到main函数。
对于solution3,可以为它写一个main函数,调用removeElements方法,就需要创建一个由ListNode组成的链表,但是对于我们现在的代码是没有链表创建功能的,所以根本不可能进行调试,在这里同学们完全可以自己写一个函数来创建链表,简单举一个例子。
比如说链表中所有节点包含的元素是
1, 2, 6, 3, 4, 5, 6
可以声明数组
int[] nums = {1, 2, 6, 3, 4, 5, 6}; //声明一个数组是int[]类型的
下面需要一个方法把数组转成一个链表,对此,把方法写在ListNode类中
1 //Definition for singly-linked list. 2 public class ListNode { 3 4 public int val; 5 public ListNode next; 6 7 public ListNode(int x) { 8 val = x; 9 }//构造函数,传入一个数值。 10 11 // 链表节点的构造函数 ,把数组转成一个链表 12 // 使用arr为参数,创建一个链表,当前的ListNode为链表头结点 13 public ListNode(int[] arr){ 14 15 if(arr == null || arr.length == 0) 16 throw new IllegalArgumentException("arr can not be empty"); 17 18 this.val = arr[0]; // this.val对应arr中索引为0的元素 19 //遍历整个数组,在这个过程中,我们一个一个的将数组中的每一个元素创建成新的ListNode,接在前一个节点上 20 ListNode cur = this; //从节点ListNode(arr[0])开始 21 for(int i = 1 ; i < arr.length ; i ++){ 22 cur.next = new ListNode(arr[i]); 23 cur = cur.next; //最后我们的这个this其实是:用for循环创建出来的链表相对应的头节点 24 } 25 } 26 27 // 以当前节点为头结点的链表信息字符串 28 @Override //为了方便在main函数中看到链表是什么 29 public String toString(){ 30 31 StringBuilder s = new StringBuilder(); 32 ListNode cur = this; 33 while(cur != null){ 34 s.append(cur.val + "->"); 35 cur = cur.next; 36 } 37 s.append("NULL"); 38 return s.toString(); 39 } 40 }
接着可以在solution→main函数中调用这个方法
1 class Solution3 { 2 3 public ListNode removeElements(ListNode head, int val) { 4 5 ListNode dummyHead = new ListNode(-1); 6 dummyHead.next = head; 7 8 ListNode prev = dummyHead; 9 while(prev.next != null){ 10 if(prev.next.val == val) 11 prev.next = prev.next.next; 12 else 13 prev = prev.next; 14 } 15 16 return dummyHead.next; 17 } 18 //**************添加main函数**************************// 19 public static void main(String[] args) { 20 21 int[] nums = {1, 2, 6, 3, 4, 5, 6}; //声明一个数组是int[]类型的 22 ListNode head = new ListNode(nums); // 调用ListNode方法 ,这里的head是一个链表,由于构造函数public ListNode(int[] arr) 23 System.out.println(head);//这里的head虽然是一个头节点,但是根据我们在头结点中覆盖的toString()方法,将打印以head为头节点的整个链表对应的字符串 24 //测试,调用Solution3 25 ListNode res = (new Solution3()).removeElements(head, 6); 26 System.out.println(res); 27 } 28 }