刚学完数据结构与算法,小小测试了一下。。。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
/**
* @param head a ListNode
* @param val an integer
* @return a ListNode
*/
public ListNode removeElements(ListNode head, int val) {
//先判断头节点是否为空
if(head==null){
return head;
}
ListNode x=head;
//获取第二个节点
ListNode y=head.next;
//如果有下一个节点,即下一个节点不是null的时候
while(y!=null){
//y.val是指取y节点的值
if(y.val==val){
//如果下一个节点的值就是val,那么删除下一个节点
x.next=y.next;
y=y.next;
}else{
x=x.next;
y=y.next;
}
}
/*刚进来的时候没有判断头节点,但是为什么要到这里才判断,而不是放在第20行以前而是放在这里呢(本人也是试了好几次才发现的)那是因为放在20行之前只能判断一次头结点,之后就会放行,如果链表第二个节点的值也是val那就出错了。但是放在while之后就不会出现这个问题!*/
if(head.val==val){
head=head.next;
}
return head;
}
}
想要测试的小伙伴可以登入:http://www.lintcode.com/zh-cn/problem/进行测试!