LintCode之删除链表中的元素

Posted echo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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,最后特别注意的就是当链表的最后一个节点的值等于要删除的节点时。

以上是关于LintCode之删除链表中的元素的主要内容,如果未能解决你的问题,请参考以下文章

LintCode 删除链表中的元素

LintCode 删除排序链表中的重复元素

LintCode Python 简单级题目 112.删除链表中的重复元素

LintCode 112. 删除排序链表中的重复元素

LintCode 删除排序链表中的重复元素

LintCode之两两交换链表中的节点