数据结构—线性结构—链表:(链表翻转)
一、题目:删除链表中等于给定值val
的所有节点。
样例:
给出链表
1->2->3->3->4->5->3
, 和 val =
3
, 你需要返回删除3之后的链表:
1->2->4->5
。
二、分析:
需要考虑的点:
1、链表为空;
2、链表只有一个元素,如5-->null;
3、链表有多个相连的需删除的元素,如1->2->3->3->3->null,val=3;
4、链表删除指定元素后为空,如1->null,val=1;
三、代码:
/**
* Definition for ListNode
*/
public class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}
public class Solution {
/**
* @param head: a ListNode
* @param val: An integer
* @return: a ListNode
*/
public ListNode removeElements(ListNode head, int val) {
if(head !=null){
while(head !=null && head.val == val){
head = head.next;
}
ListNode listNode = new ListNode(0);
ListNode listNodeNext = new ListNode(0);
listNode = head;
while(listNode != null && listNode.next !=null){
if(listNode.next.val != val){
listNode = listNode.next;
}else{
listNodeNext = listNode.next;
while(listNodeNext.next != null && listNodeNext.next.val == val){
listNodeNext = listNodeNext.next;
}
listNode.next = listNodeNext.next;
}
}
}
return head;
}
}