LintCode之删除链表中的元素
题目描述
我的代码
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { val = x; } 7 * } 8 */ 9 10 11 public class Solution { 12 /* 13 * @param head: a ListNode 14 * @param val: An integer 15 * @return: a ListNode 16 */ 17 public ListNode removeElements(ListNode head, int val) { 18 // write your code here 19 if(head == null) { 20 return null; 21 } 22 //新建一个头节点 23 ListNode h = new ListNode(0); 24 ListNode p = h; 25 while(head != null) { 26 if(head.val != val) { 27 p.next = head; 28 p = p.next; 29 } 30 if(head.next != null) { 31 head = head.next; 32 }else { 33 break; 34 } 35 } 36 37 /* 38 * 这里要特别注意,当最后一个节点是要删除的节点时, 39 * 没有这个判断测试数据不能通过 40 */ 41 if(p.next != null) { 42 p.next = null; 43 } 44 45 if(h.next == null) { 46 return null; 47 }else { 48 h = h.next; 49 return h; 50 } 51 } 52 }
结论:删除链表中的元素这一道题是LintCode中的一道入门题,以前写算法题的时候用的都是C语言写的,C语言中有指针这个概念,利用指针理解链表的结构就比较容易,但是这次我用的是Java,刚开始写的时候一脸蒙,转不过弯来。我的思路是新建一个头节点h,再把这个节点赋值给p,然后循环遍历链表,当一个节点的值不等于要删除的值时,让p的next指向这个节点,再让p=p.next,最后特别注意的就是当链表的最后一个节点的值等于要删除的节点时。