給我一個字符串,例如I love java,輸出: java love I
public?class?StringReverse?{????????public?void?swap(char[]?arr,?int?begin,?int?end)?{??????????while(begin?<?end)?{??????????????char?temp?=?arr[begin];??????????????arr[begin]?=?arr[end];??????????????arr[end]?=?temp;??????????????begin++;??????????????end--;??????????}??????}??????//I?love?java??????public?String?swapWords(String?str)?{??????????char[]?arr?=?str.toCharArray();??????????swap(arr,?0,?arr.length?-?1);??????????int?begin?=?0;??????????for?(int?i?=?1;?i?<?arr.length;?i++)?{??????????????if?(arr[i]?==?'?')?{??????????????????swap(arr,?begin,?i?-?1);??????????????????begin?=?i?+?1;??????????????}??????????}????swap(arr,?begin,?arr.length-1);????????return?new?String(arr);??????}????????????public?static?void?main(String[]?args)?{??????????String?str?=?"I?love?java";??????????System.out.println(new?StringReverse().swapWords(str));??????}???}
輸入一個正數(shù)n,輸出所有和為n的連續(xù)正數(shù)序列。
分析:設(shè)定兩個指針,min指向和為n的連續(xù)正數(shù)序列的最小值,max指向和為n的連續(xù)正數(shù)序列最大值。sum表示真正的和。
初始情況下,min、max和sum都指向1.
當(dāng)sum小于n時,max++;
當(dāng)sum大于n時,min++;
當(dāng)sum等于n時,輸出整個序列。
public?class?a?{public?static?void?getAns(int?n)?{????int?min?=?1;????int?sum?=?1;????int?max?=?1;????while(min?<=?n/2+1)?{????????if(sum?==?n)?{????????????for(int?k?=?min;?k<=max;?k++)?{?????????????????????System.out.println(k+"");????????????}????????????System.out.println();????????????sum?=?sum?-?min;????????????min?++;????????????max?++;????????????sum?=?sum+max;????????}????????if(sum?>?n)?{????????????sum?=?sum?-?min;????????????min?++;????????}?else?{????????????max?++;????????????sum?=?sum?+?max;????????}????}}public?static?void?main(String[]?args)?{????getAns(15);}}
2.給定一個排好序的鏈表,刪除鏈表中重復(fù)的結(jié)點,返回鏈表頭指針。
分析:(1)鏈表中重復(fù)的結(jié)點不需要保留一個,要全部刪除。
(2)因為相同的結(jié)點全部要刪除,所以我們設(shè)定三個指針,node指向當(dāng)前節(jié)點,prev指向前驅(qū),還有一個指向后繼結(jié)點。一旦遇到node和后繼結(jié)點相等,就node++,知道沒有重復(fù)的再移動prev.
(3)注意:頭結(jié)點也可能有重復(fù),所以也可能被刪除,所以需要定義一個root指向頭結(jié)點。
public?class?a?{????//?結(jié)點定義,包括當(dāng)前結(jié)點的值和next指向????private?static?class?ListNode?{????????private?int?val;????????private?ListNode?next;?????????public?ListNode()?{????????}?????????public?ListNode(int?val)?{????????????this.val?=?val;????????}?????????public?String?toString()?{????????????return?val?+?"";????????}????}?????//?刪除節(jié)點的函數(shù)????public?static?ListNode?delete(ListNode?head)?{????????if?(head?==?null)????????????return?null;????????if?(head.next?==?null)????????????return?head;????????//?定義一個臨時的頭結(jié)點,因為頭結(jié)點也可能被刪除????????ListNode?root?=?new?ListNode();????????root.next?=?head;????????ListNode?prev?=?root;????????ListNode?node?=?head;?????????while?(node?!=?null?&&?node.next?!=?null)?{????????????if?(node.val?==?node.next.val)?{????????????//若有連續(xù)相同的結(jié)點,則node要一直++??????while?(node.next?!=?null?&&?node.next.val?==?node.val)????????????????????node?=?node.next;????????????????prev.next?=?node.next;????????????}?else?{????????????????prev.next?=?node;????????????????prev?=?prev.next;????????????}????????????node?=?node.next;????????}????????return?root.next;????}????//打印出來刪除后的結(jié)果????private?static?void?print(ListNode?head)?{????????while?(head?!=?null)?{????????????System.out.print(head?+?"->");????????????head?=?head.next;????????}????????System.out.println("null");????}?????public?static?void?main(String[]?args)?{????????//?按照結(jié)點的定義新建一個鏈表????????ListNode?n1?=?new?ListNode(1);????????ListNode?n2?=?new?ListNode(1);????????ListNode?n3?=?new?ListNode(2);????????ListNode?n4?=?new?ListNode(2);????????ListNode?n5?=?new?ListNode(2);????????ListNode?n6?=?new?ListNode(3);????????ListNode?n7?=?new?ListNode(5);?????????n1.next?=?n2;????????n2.next?=?n3;????????n3.next?=?n4;????????n4.next?=?n5;????????n5.next?=?n6;????????n6.next?=?n7;????????n7.next?=?null;????????//調(diào)用delete函數(shù),傳入n1的值,當(dāng)成頭結(jié)點????????ListNode?result?=?delete(n1);????????print(result);?????}}
以上就是長沙一度軟件培訓(xùn)java培訓(xùn)機構(gòu)的小編針對“Java面向?qū)ο缶幊叹毩?xí)題及答案”的內(nèi)容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。