【发布时间】:2021-11-30 17:39:03
【问题描述】:
我正在解决一个链表问题,我必须对第一个和最后一个节点求和并返回最大和。例如:3-->1-->1-->3。所以程序将添加第 0 个和第 (n-1) 个索引值 (3+3=6),然后添加第 1 个和 (n-2) 个索引值 (1+1 = 2)。由于 6>2,它将返回 6。 它类似于https://www.geeksforgeeks.org/rearrange-linked-list-alternate-first-last-element/
代码
void reverseList(SinglyLinkedListNode* head)
{
SinglyLinkedListNode* prev = NULL;
SinglyLinkedListNode* curr = head;
SinglyLinkedListNode* next = NULL;
while(curr)
{
next = curr->next;
curr->next= prev;
prev = curr;
curr = next;
}
head = prev;
}
int maximumPages(SinglyLinkedListNode* head) **<---start**
{
SinglyLinkedListNode* slow = head;
SinglyLinkedListNode* fast = slow->next;
//finding middle of linked list
while(fast && fast->next)
{
slow = slow->next;
fast = fast->next->next;
}
//split the list in two
SinglyLinkedListNode* head1 = head;
SinglyLinkedListNode* head2 = slow->next;
slow->next = NULL;
//reverse the second list
reverseList(head2);
//calculate max pages
int maxi = INT_MIN;
int sum = 0;
SinglyLinkedListNode* ptr1 = head1;
SinglyLinkedListNode* ptr2 = head2;
while(ptr1 || ptr2)
{
sum = ptr1->data + ptr2->data;
maxi = max(maxi, sum);
ptr1 = ptr1->next;
ptr2 = ptr2->next;
}
return maxi; **<---end**
}
我检查了多次,但没有发现代码有任何异常。谁能告诉我分段错误在哪里?
【问题讨论】:
-
欢迎来到 Stack Overflow。对于您描述的问题,您的代码似乎太复杂了。清单可以有多短?您尝试过哪些测试用例?
标签: linked-list segmentation-fault singly-linked-list