>

목록이 1->2->3->4->X가되도록 링크 된 목록을 쌍으로 바꾸고 싶습니다 그러면 다음 2->1->4->3->X

를 출력해야합니다.

이 문제를 해결하려고했지만 실행되지 않는 것 같습니다. 여러분, 제 코드에 어떤 문제가 있는지 알려주세요.

ListNode* reverseListInPairs(ListNode *head){
        ListNode *current = head,*newHead = NULL,*temp = NULL,*prev = NULL;
        while(current != NULL && current->next != NULL){
            temp = current->next;
            current->next = current->next->next;
            temp->next = current;
            prev->next = temp;
            prev = current;
            current = current->next;
            if(newHead == NULL){
                newHead = temp;
            }
        }
        return newHead;
    }


  • 답변 # 1

    Node *reverse (Node *head, int k)  
    {  
        Node* current = head;  
        Node* next = NULL;  
        Node* prev = NULL;  
        int count = 0;  
        while (current != NULL && count < k)  
        {  
            next = current->next;  
            current->next = prev;  
            prev = current;  
            current = next;  
            count++;  
        }  
        if (next != NULL)  
        head->next = reverse(next, k);  
        return prev;  
    }
    
    

    k의 값을 2로 전달

  • 답변 # 2

    void pairWiseSwap(struct Node* head) 
    { 
        struct Node* temp = head; 
        /* Traverse further only if there are at-least two nodes left */
        while (temp != NULL && temp->next != NULL) { 
            /* Swap data of node with its next node's data */
            swap(&temp->data, &temp->next->data); 
            /* Move temp by 2 for the next pair */
            temp = temp->next->next; 
        } 
    }
    
    

    GeeksForGeeks에서 제공.

    오류가 무엇인지에 관해서는 prev가 이미 NULL이라는 것이 지적되었습니다.

    ListNode *current = head,*newHead = NULL,*temp = NULL,*prev = NULL;
     .
     .
     prev->next = temp;
    
    
    

    세그멘테이션 오류가 발생하기 때문에 NULL->다음을 가질 수 없습니다.

  • 답변 # 3

    what is wrong in my code.

    내가 보는 주요 문제는 다음과 같습니다.

    와이즈 비즈 와이즈 비즈 루프의 첫 번째 반복에서
     여전히 
               prev->next = temp;
    입니다
     이 시점에서 널 포인터 역 참조를 수행하고 있습니다.

    실제 노드 앞에 합성 헤드 노드를 도입하여이 문제를 해결하고 목록 헤드의 특수 사례를 제거 할 수 있습니다.

    prev
    
    

    원본 코드에 최대한 가깝게 붙어 있지만 개인적으로 조금 더 강화하겠습니다. 특히 NULL 를 모두 유지할 필요는 없습니다.  그리고 ListNode* reverseListInPairs(ListNode *head) { ListNode fake_head = { .next = head }; ListNode *prev = &fake_head; ListNode *current = head; while (current != NULL && current->next != NULL) { ListNode *temp = current->next; current->next = current->next->next; temp->next = current; prev->next = temp; prev = current; current = current->next; } return fake_head.next; }  반복을 통해;후자이면 충분합니다.

    current
    
    
    prev

  • 이전 javascript - Vuetify에서 클릭하면 v-data-table에서 행을 강조 표시하는 방법은 무엇입니까?
  • 다음 javascript - 비동기/작동하지 않습니까?