小弟我想請問我的 push_front 出了甚麼問題? 逐步執行看似都沒問題但總在跳出 push_font 後 list 依然沒有改變。
而且為何這問題沒有在 push_back 出現 , 我是依照相同的想法下去寫的。
#include<iostream>
using namespace std;
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
void push_front(ListNode* list, int n) {
if (list->val == 0) {
list->val = n;
return;
}
ListNode* front = new ListNode(n);
front->next = list;
list = front;
}
void push_back(ListNode* list, int n) {
if (list->val == 0) {
list->val = n;
return;
}
ListNode* back = new ListNode(n);
while (list->next != NULL) {
list = list->next;
}
list->next = back;
}
void printlist(ListNode* list) {
while (list != NULL) {
cout << list->val << " ";
list = list->next;
}
cout << endl;
}
int main() {
ListNode* L1 = new ListNode(NULL);
push_back(L1, 2);
push_back(L1, 4);
push_back(L1, 3);
push_front(L1, 4);
printlist(L1);
return 0;
}
你的程式中
「L1永遠指的是同一個
節點」(value=2 那個)
由於 push_back, push_front 都不會改變 L1 的值
所以不管再怎麼 push_back, push_front
L1 都不會改變
底下把 push_front 稍微改了一點點
目的是改成「L1永遠指的是第一個
節點」(push_back不變,push_front要改)
參考看看
選我正解
#include<iostream>
using namespace std;
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* push_front(ListNode* list, int n) {
if (list->val == 0) {
list->val = n;
return NULL;
}
ListNode* front = new ListNode(n);
front->next = list;
//list = front;
return front;
}
void push_back(ListNode* list, int n) {
if (list->val == 0) {
list->val = n;
return;
}
ListNode* back = new ListNode(n);
while (list->next != NULL) {
list = list->next;
}
list->next = back;
}
void printlist(ListNode* list) {
while (list != NULL) {
cout << list->val << " ";
list = list->next;
}
cout << endl;
}
int main() {
ListNode* L1 = new ListNode(NULL);
push_back(L1, 2);
push_back(L1, 4);
push_back(L1, 3);
L1 = push_front(L1, 4);
printlist(L1);
return 0;
}
L1是一個位址,
即使你在函數裡面重新指向,
L1還是原來那個位址,
我之前做Linked List是把開頭的那個放棄,
第一個next開始才是真正的資料所在,
開頭的那個永遠都是固定的,
其實我不知道正統的方式應該是怎麼做的.