2つのリンクされたリストから数字を追加して、それを3番目のリストに追加しようとしています。これはうまく追加されますが、私のコードブロックコンパイラは無限ループまたは何らかの例外のためにこのコードを実行している間に応答を停止します。リンクされたリストに2つの数字を追加する
次のコードは、リンクされたリストに逆の順序で格納された2つの数値を追加します。
struct Node{
int x;
Node* next;
};
class LinkedList{
public:
Node* head;
LinkedList(){
head = NULL;
}
void addNode(int num){
Node* n = new Node();
n->x = num;
n->next = NULL;
if(head == NULL){
head = n;
}else{
Node* n1 = head;
while(n1 != NULL){
if(n1->next == NULL){
n1->next = n;
break;
}
n1 = n1->next;
}
}
}
int popNode(){
int num = NULL;
if (head != NULL){
num = head->x;
head = head->next;
}else{
cout << "Yay" << "\n";
num = NULL;
}
return num;
}
void printList(){
Node* n1 = head;
while(n1 != NULL){
if(n1->next == NULL){
cout << n1->x << "\n";
}else{
cout << n1->x << "->";
}
n1 = n1->next;
}
}
};
LinkedList* add_nums(LinkedList* l1, LinkedList* l2) {
LinkedList l3;
int num1= (*l1).popNode();
int num2= (*l2).popNode();
int carry = 0;
while(num1 != NULL || num2 != NULL){
int num3 = num1+num2+carry;
if (num3 > 9){
int temp = num3 % 10;
carry = (num3 - temp)/10;
num3 = temp;
}
l3.addNode(num3);
l3.printList();
num1 = (*l1).popNode();
num2 = (*l2).popNode();
}
return &l3;
}
int main(int argc, char const *argv[]) {
LinkedList list1;
LinkedList list2;
list1.addNode(2);
list1.addNode(4);
list1.addNode(3);
list2.addNode(5);
list2.addNode(6);
list2.addNode(4);
(*(add_nums(&list1, &list2))).printList();
return 0;
}
誰でも私が間違っていることを教えてもらえますか?
変更点以下の回答から入力した後、私が何をすべきコーディングする:私は0
- は私のループを終了するのLinkedListオブジェクトを使用する必要があります。
- 私はポインタ
からの機能にアクセスする方法をみんなありがとうを変更する必要があります。
デバッガを使用してコードをステップ実行する方法を学ぶ必要があるようです。良いデバッガを使用すると、プログラムを1行ずつ実行し、どこからずれているかを確認することができます。これはプログラミングをする場合に不可欠なツールです。さらに読む:[小さなプログラムをデバッグする方法](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/) – NathanOliver
合意。そうすれば、無限ループや推測の代わりに例外***のためにこのコードを実行している間に***が応答を停止する理由を答えることができます。 – drescherjm
'return &l3;':ローカル変数UBへの参照を返します。 – Jarod42