日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Java链表和递归

發(fā)布時間:2023/11/27 生活经验 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java链表和递归 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

刪除鏈表的指定元素:

public class ListNode {public int val;public ListNode next;public ListNode(int x){val=x;}//鏈表節(jié)點的構(gòu)造函數(shù)//使用arr為參數(shù),創(chuàng)建一個鏈表,當前的ListNode為鏈表頭節(jié)點public ListNode(int arr[]){if(arr==null||arr.length==0)throw new IllegalArgumentException("arr can not be empty");this.val=arr[0];ListNode cur=this;for(int i=1;i<arr.length;i++){cur.next=new ListNode(arr[i]);cur=cur.next;}}//以當前節(jié)點為頭節(jié)點的鏈表信息字符串@Overridepublic String toString(){StringBuilder res=new StringBuilder();ListNode cur=this;while(cur!=null){res.append(cur.val+"->");cur=cur.next;}res.append("NULL");return res.toString();}
}

  第一種方法:

public class Solution {public ListNode removeElements(ListNode head,int val){while(head!=null&& head.val==val){
//		   ListNode delNode=head;
//		   head=head.next;
//		   delNode.next=null;head=head.next;}if(head==null)return null;ListNode prev=head;while(prev.next!=null){if(prev.next.val==val){
//	    		ListNode delNode=prev.next;
//	    		prev.next=delNode.next;
//	    		delNode.next=null;prev.next=prev.next.next; }else{prev=prev.next;}}return head;}public static void main(String[] args){int[] nums={1,2,3,4,5,6};ListNode head=new ListNode(nums);System.out.println(head);ListNode res=(new Solution()).removeElements(head, 6);System.out.println(res);}
}

  使用頭節(jié)點:

public class Solution2 {public ListNode removeElements(ListNode head,int val){ListNode dummyHead=new ListNode(-1);dummyHead.next=head;ListNode prev=dummyHead;while (prev.next!=null) {if(prev.next.val==val)prev.next=prev.next.next;elseprev=prev.next;}return head;}public static void main(String[] args){int[] nums={1,2,3,4,5,6};ListNode head=new ListNode(nums);System.out.println(head);ListNode res=(new Solution2()).removeElements(head, 6);System.out.println(res);}
}

  實現(xiàn)求數(shù)組遞歸的算法:

public class Sum {public static int sum(int[] arr){return sum(arr,0);}//計算arr[l...n]這個區(qū)間內(nèi)所有數(shù)字的和private static int sum(int[] arr,int l){if(l==arr.length)return 0;return arr[l]+sum(arr,l+1);}public static void main(String[] args){int[] nums={1,2,3,4,5,6,7,8};System.out.println(sum(nums));}
}

  用遞歸實現(xiàn)刪除鏈表中的元素:

public class Solution3 {public ListNode removeElements(ListNode head,int val){if(head==null)return null;head.next = removeElements(head.next, val);return head.val==val? head.next:head;}public static void main(String[] args){int[] nums={1,2,3,4,5,6};ListNode head=new ListNode(nums);System.out.println(head);ListNode res=(new Solution3 ()).removeElements(head, 6);System.out.println(res);}
} 
打印執(zhí)行過程:
public class Solution3 {
public ListNode removeElements(ListNode head,int val,int depth){
String depthString=generateDepthString(depth);
System.out.println(depthString);
System.out.println("Call:remove "+val+"in "+head);if(head==null){
System.out.print(depthString);
System.out.println("Call:remove "+val+"in "+head);
return null;
}ListNode res=removeElements(head.next, val,depth+1);
System.out.print(depthString);
System.out.println("After remove "+val+":"+res);
ListNode ret;
if(head.val==val)
ret=res;
else{
head.next=res;
ret=head;
}
System.out.print(depthString);
System.out.println("Return:"+ret);
return ret;
}private String generateDepthString(int depth){
StringBuilder res=new StringBuilder();
for(int i=0;i<depth;i++)
res.append("---");
return res.toString();
}public static void main(String[] args){
int[] nums={1,2,3,4,5,6};
ListNode head=new ListNode(nums);
System.out.println(head);
ListNode res=(new Solution3 ()).removeElements(head, 6,0);
System.out.println(res);
}
}

  

轉(zhuǎn)載于:https://www.cnblogs.com/sunliyuan/p/10590414.html

總結(jié)

以上是生活随笔為你收集整理的Java链表和递归的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。