转自:qq_17525769的博客,网址:https://blog.csdn.net/qq_17525769/article/details/53915042
package algorithm;
import java.lang.ref.WeakReference;
/*
删除链表中等于给定值val的所有节点。
样例:
给出链表 1->2->3->3->4->5->3, 和 val = 3, 你需要返回删除3之后的链表:1->2->4->5。
* */
public class DeleteListNode {
class ListNode{
int value;//value值
ListNode nextNode;//下一个节点
ListNode(int value){ //构建函数
this.value=value;
this.nextNode=null;
}
}
private ListNode buildListNode(int[] input){
ListNode first=null,last=null;
ListNode newNode;
if(input.length>0){ //存在输入的数组
for(int i=0;i<input.length;i++){
newNode=new ListNode(input[i]);
newNode.nextNode=null;
if(first==null){ //无开始
first=newNode;
last=newNode;
}else{
last.nextNode=newNode;
last=newNode;
}
}
}
return first;
}
/*
* 删除链表中值为val
*
* */
public ListNode removeElements(ListNode head,int val){
if(head==null){
return null;
}
ListNode p=head;
ListNode q=head.nextNode;
while(q!=null){
if(q.value==val){
p.nextNode=q.nextNode;
q=q.nextNode;
}else{
p=p.nextNode;
q=q.nextNode;
}
}
if(head.value==val){
return head.nextNode;
}
return head;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] input={1,2,3,3,4,4,5};
DeleteListNode dln=new DeleteListNode();
//弱连接,当垃圾回收时,无论内存是否充足,都回收
//WeakReference<DeleteListNode> wff=new WeakReference<DeleteListNode>(dln);
ListNode head=null;
ListNode listNode=dln.buildListNode(input);
head=listNode;
System.out.println("新添加的链表如下:");
while(listNode!=null){
//System.out.println("value="+listNode.value+" /listNode"+listNode.nextNode);
System.out.print("->"+listNode.value);
listNode=listNode.nextNode;
}
System.out.println("");
//删除特定的值
int target=3;
dln.removeElements(head, target);
listNode=head;
System.out.println("删除"+target+ " 新添加的链表如下:");
while(listNode!=null){
//System.out.println("value="+listNode.value+" /listNode"+listNode.nextNode);
System.out.print("->"+listNode.value);
listNode=listNode.nextNode;
}
}
}
转自:qq_17525769的博客,网址:https://blog.csdn.net/qq_17525769/article/details/53915042