在 leetcode Add-Two-nums 中,我試圖遍歷兩個鏈表,在第一個示例中,我創建一個指向已分配節點的中間指標,然后將其添加到原始節點,在第二個示例中,我嘗試擺脫這個ptr變數并直接添加節點,但在兩個示例中繼續在 leetcode 中獲取堆疊緩沖區溢位,并且在我自己的機器上編譯時,第二個示例中只有一個 seg 錯誤,第一個示例作業正常
ListNode * addTwoNums(ListNode *l1, ListNode *l2)
{
ListNode *result;
ListNode *tmp = result;
int carry =0;
int sum =0;
while ( l1->next != NULL && l2->next != NULL)
{
sum = l1->val l2->val carry ;
printf("%d %d = %d\n", l1->val, l2->val, l1->val l2->val);
if ( sum > 9)
{
result->val = 0;
carry = 1;
}
else
{
result->val = sum;
carry = 0;
}
ListNode *ptr = (ListNode *)malloc(sizeof(ListNode));
result->next = ptr;
l1 = l1->next;
l2 = l2->next;
result = result->next;
}
}
在此示例中,我洗掉了指標ptr并嘗試將分配的節點直接添加到下一個值,但出現段錯誤
ListNode * addTwoNums(ListNode *l1, ListNode *l2)
{
ListNode *result;
ListNode *tmp = result;
int carry =0;
int sum =0;
while ( l1->next != NULL && l2->next != NULL)
{
sum = l1->val l2->val carry ;
printf("%d %d = %d\n", l1->val, l2->val, l1->val l2->val);
if ( sum > 9)
{
result->val = 0;
carry = 1;
}
else
{
result->val = sum;
carry = 0;
}
result->next = (ListNode *)malloc(sizeof(ListNode));
l1 = l1->next;
l2 = l2->next;
result = result->next;
}
}
uj5u.com熱心網友回復:
對于初學者來說,這個while回圈
while ( l1->next != NULL && l2->next != NULL)
如果至少有一個傳遞的串列為空,則已經可以呼叫未定義的行為。
指標結果未初始化
ListNode *result;
所以至少這個宣告
result->val = 0;
還呼叫未定義的行為。
并且在任何情況下都將資料成員設定為val沒有0意義。
請注意,在 while 回圈之后,傳遞的指標之一可以是非空指標。您還需要在 while 回圈之后對其進行處理。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/427877.html
