[英]How to reverse a linked list
我正在研究 Stack Overflow 並遇到了 #92。
反轉鏈表 2 問題。 這是問題的描述:給定單鏈表的頭部和左右兩個整數,其中left <= right,將列表的節點從左位置反轉到右位置,並返回反轉后的列表。 例如,給定鏈表 [1,2,3,4,5] 1, 4 鏈表應該變成 [4,2,3,1,5]
它適用於所有運行,但我的代碼為一個測試用例產生了錯誤的答案,這沒有意義。 給定的。 [1,2,3,4] 1,4 1 是左側位置,4 是右側位置 列表成為有意義的是 [4,2,3,1] 這是我的代碼產生的。 他們顯示的正確答案是 [4,3,2,1],這讓我很頭疼,我不明白為什么會這樣。 任何抬頭表示贊賞。
class Solution {
public:
ListNode* reverseBetween(ListNode* head, int left, int right)
{
int x = 1;
ListNode * left_node = nullptr;
ListNode * right_node = nullptr;
ListNode * curr = head;
int temp = 0;
if (!head)
return nullptr;
while(curr)
{
if(x == left)
left_node = curr;
if(x == right)
right_node = curr;
curr = curr->next;
++x;
}
temp = left_node->val;
left_node->val = right_node->val;
right_node->val = temp;
return head;
}
您的解決方案實現了左右交換 2 個索引的值,這與問題中給出的示例相匹配。
但問題是要顛倒左右之間的列表,而不僅僅是交換兩個端點。 所以1,2,3,4
變成4,3,2,1
是正確的解決方案,示例和您的解決方案都是錯誤的,它們只是交換端點。
PS:大多數語言從 0 開始計數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.