목록이 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
-
답변 # 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
관련 자료
- Ada의 역방향 연결 목록
- c - 첫 번째 요소를 역으로 만 인쇄하여 이중 연결 목록 인쇄
- c++ - 단독으로 연결된 목록을 사용하여 문자열을 뒤집습니다
- python - 팬더에서 연결된 쌍에 고유 한 커플 ID를 만드는 방법
- flutter - 다트에서 대리 쌍을 포함하는 문자열을 뒤집는 방법?
- c - 연결된 목록 삽입 및 역 출력
- javascript - 연결된 목록을 뒤집습니다 구현에 어떤 문제가 있습니까?
- c - 이중 포인터로 연결된 목록을 재귀 적으로 뒤집는 방법
- c - 연결리스트를 반대로하는 방법
- java - 각 반복에서 연결 목록을 반으로 나누어 단일 연결 목록을 재귀 적으로 반전
- 파이썬에서 반복적이지 않은 재귀 적 인 방법으로 이중 연결 목록을 뒤집습니다
- java - 연결된 모든 목록 정수의 문자열을 역순으로 반환하는 방법은 무엇입니까?
- recursion - C ++ 역방향 연결 목록 재귀 적으로 작동하는 이유는 무엇입니까?
- c - 연결된 목록에서 포인터 반전
- python - 문자열을 뒤집지 만 문자 쌍을 함께 유지
- c++ - 재귀와 포인터를 가리키는 포인터를 사용하여 링크 된 목록을 뒤집으려고하지만 예상되는 올바른 출력을 제공하지 않는 reversell 함수
- sql - 테이블에서 역순 쌍이없는 쌍을 찾는 방법은 무엇입니까?
k의 값을 2로 전달