mysql庫表操作
阿新 • • 發佈:2021-07-11
兩數相加
問題描述:
給你兩個非空連結串列,表示兩個非負整數。他們的每位數字都是按照逆序方式儲存,且每個節點只能儲存一位數。
請你將兩個數相加,並以相同形式返回一個表示和的連結串列。
![img](file:///C:\Users\86130\Documents\Tencent Files\2909692915\Image\C2C\HGPQS%6S5LZIBU6]$E@[email protected])
輸入:L1 = [2,4,3],L2 = [5.6.4]
輸出:[7,0,8]
解釋:342 + 465 = 807
程式碼實現(C++)
#include<iostream> #include<list> #include<iterator> using namespace std; class solution { public: void input();//輸入數字,存入連結串列 void polishing();//補齊連結串列 void count();//求和 void output();//輸出結果 private: int size1;//連結串列L1的節點 int size2;//連結串列L2的節點 list<int> L1;//L1存放的資料型別是int型 list<int> L2; list<int> result;//結果連結串列存放的資料型別是int }; //輸入 void solution::input() { int input1; int input2; cin>>size1; for(int i = 0;i < size1;i++) { cin>>input1; L1.push_back(input1);//push_back:將input1加到L1當前最後一個元素的下一個元素 } cin>>size2; for(int i = 0;i < size2;i++) { cin>>input2; L2.push_back(input2); } } //補齊連結串列 void solution::polishing() { int temp; //L1比L2長,在L2後面補0 if(L1.size() > L2.size()) { temp = L1.size() - L2.size(); for(int i = 0;i < temp;i++) { L2.push_back(0); } } //L2比L1長,在L1後面補0 if(L1.size() < L2.size()) { temp = L2.size() - L1.size(); for(int i = 0;i < temp;i++) { L1.push_back(0); } } } //求和 void solution::count() { int temp2; int add=0;//進位 ////iterator:檢查容器內元素並遍歷元素的資料型別 list<int>::iterator iter1 = L1.begin();//.begin();返回指向容器 最開始位置資料的指標 list<int>::iterator iter2 = L2.begin(); for(; iter1 != L1.end(); iter1++)//.end();返回指向容器最後一個數據單元+1的指標 { //進位 if( (*iter1) + (*iter2) + add >= 10) { temp2 = (*iter1) + (*iter2) + add; result.push_back(temp2); add = 1; } //沒有進位 if( (*iter1) + (*iter2) + add < 10) { temp2 = (*iter1) + (*iter2) + add; result.push_back(temp2); add = 0; } iter2++; } } //輸出結果 void solution::output() { for(list<int>::iterator iter = result.begin(); iter != result.end(); iter++) { cout<<*iter; } } int main() { solution s; s.input();//輸入數字,存入連結串列 s.polishing();//補齊連結串列 s.count();//求和 s.output();//輸出結果 return 0; }
Java (1)
//連結串列初始化 public node addTwoNumbers(node l1, node l2) { node node1 = l1; node node2 = l2; //node1、node2不為空時進入循壞 while (node1 != null) { if (node2 != null){ node1.data += node2.data;//node1.data=node1.data+node2.data node2 = node2.next;//node2移到下一結點 } //如果node1的下一結點為空且node2的下一結點不為空 if (node1.next == null && node2!=null){ node1.next = node2;//node1的下一結點等於node2 } node1 = node1.next;//node1移到下一結點 } return node1;//返回node1 } public void marge(node node) { //node不為空時 while (node != null){ //node的資料大於10 if (node.data >= 10){ //進位 node.data = node.data%10; if (node.next == null)//如果node的下一結點為空 { //node的下一結點等於0 node.next = new node(0); } node.next.data +=1;//node的下一結點等於0+1 } } } public node addTwoNumbers2(node l1, node l2) { //宣告 node pre = new node(0); node cur = pre; int carry = 0; //L1、L2不為空時進入循壞 while(l1 != null || l2 != null) { int x = l1 == null ? 0 : l1.data;//L1為空則返回0賦給x,否則返回L1的資料 int y = l2 == null ? 0 : l2.data;//L2為空則返回0賦給y,否則返回L2的資料 int sum = x + y + carry; carry = sum / 10;//進位數等於0或1 sum = sum % 10; cur.next = new node(sum);//cur的下一結點等於sum cur = cur.next; if(l1 != null) //如果L1為空 l1 = l1.next;//指向下一結點 if(l2 != null)//如果L2為空 l2 = l2.next;//指向下一結點 } //進位了 if(carry == 1) { cur.next = new node(carry); } return pre.next; }
Java(2)
//static是一個修飾符,用於修飾類的成員方法、類的成員變數,它修飾的方法稱為靜態方法 static node head = null;//節點指標域 static node tem = null;//節點指標域 class node { int data; //節點資料域 node next = null; //節點指標域 public node(int data) { this.data = data; //當構造一個新的節點的時候,順便給節點進行初始化 } } public void addNode(int d){ node N = new node(d); //如果頭結點為空 if(head==null){ head = N;//把N賦給頭結點 return; /*由於每次是增加一個節點,所以對頭結點進行初始化之後就要退出函式*/ } tem = head; /*一般一個連結串列的頭結點是不能動的,因此需要把頭結點賦值給一個臨時變數 這樣在對連結串列進行訪問的時候,就可以用這個臨時變數進行逐個的訪問,不對頭結點產生影響*/ //如果tem的下一結點不為空 while(tem.next!=null){ tem = tem.next;//移到下一結點 } tem.next = N;//N賦給tem的下一結點 }