更新時間:2020-07-13 15:14:00 來源:動力節(jié)點 瀏覽1913次
給我一個字符串,例如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ù)序列。
分析:設定兩個指針,min指向和為n的連續(xù)正數(shù)序列的最小值,max指向和為n的連續(xù)正數(shù)序列最大值。sum表示真正的和。
初始情況下,min、max和sum都指向1.
當sum小于n時,max++;
當sum大于n時,min++;
當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.給定一個排好序的鏈表,刪除鏈表中重復的結點,返回鏈表頭指針。
分析:(1)鏈表中重復的結點不需要保留一個,要全部刪除。
(2)因為相同的結點全部要刪除,所以我們設定三個指針,node指向當前節(jié)點,prev指向前驅,還有一個指向后繼結點。一旦遇到node和后繼結點相等,就node++,知道沒有重復的再移動prev.
(3)注意:頭結點也可能有重復,所以也可能被刪除,所以需要定義一個root指向頭結點。
public?class?a?{
????//?結點定義,包括當前結點的值和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;
????????//?定義一個臨時的頭結點,因為頭結點也可能被刪除
????????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ù)相同的結點,則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;
????}
????//打印出來刪除后的結果
????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)?{
????????//?按照結點的定義新建一個鏈表
????????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;
????????//調用delete函數(shù),傳入n1的值,當成頭結點
????????ListNode?result?=?delete(n1);
????????print(result);
?
????}
}
以上就是動力節(jié)點java培訓機構的小編針對“Java面向對象編程練習題及答案”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務。