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,最后特别注意的就是当链表的最后一个节点的值等于要删除的节点时。

posted @ 2017-10-23 22:45  zwt3  阅读(638)  评论(0编辑  收藏  举报