题解 | 牛牛的链表交换
牛牛的链表交换
https://www.nowcoder.com/practice/0e009fba6f3d47f0b5026b5f8b0cb1bc
#include <stdio.h> #include <stdlib.h> // write your code here...... struct ListNode { int nodeVal; struct ListNode * next; }; int main() { int n, val, i; scanf("%d",&n); struct ListNode * pHeadNode; struct ListNode *p, *pLastPrev,*pLastPrevPrev,*pLast, *pTemp1, *pTemp2; pHeadNode = (struct ListNode *) malloc(sizeof(struct ListNode)); if(!pHeadNode) { return -1; } for (i = 1; i <= n; i++) { scanf("%d",&val); p = (struct ListNode *) malloc(sizeof(struct ListNode)); if(p) { p->nodeVal = val; p->next = NULL; //printf("p->nodeVal = %d", p->nodeVal); } if(i == 1) { pHeadNode->next = p; pLast = pLastPrev = p; pLastPrevPrev = p; } else if ( i <= 3) { pLast->next = p; pLastPrev = pLast; pLast = p; } else { pLast->next = p; pLastPrevPrev = pLastPrev; pLastPrev = pLast; pLast = p; } } if(n >= 3 && n <= 4) { if(pHeadNode->next != NULL && pHeadNode->next->next != NULL) { pTemp1 = pHeadNode->next; pTemp2 = pHeadNode->next->next->next; pHeadNode->next->next->next = pTemp1; pHeadNode->next = pHeadNode->next->next; pTemp1->next = pTemp2; } for (i = 1, p = pHeadNode->next; i <= n; i++) { if(i == 1) { pLast = pLastPrev = p; pLastPrevPrev = p; } else if ( i <= 3) { pLast->next = p; pLastPrev = pLast; pLast = p; } else { pLast->next = p; pLastPrevPrev = pLastPrev; pLastPrev = pLast; pLast = p; } p = p->next; } pLastPrevPrev->next = pLast; pLast->next = pLastPrev; pLastPrev->next = NULL; } else if (n >= 5) { if(pHeadNode->next != NULL && pHeadNode->next->next != NULL) { pTemp1 = pHeadNode->next; pTemp2 = pHeadNode->next->next->next; pHeadNode->next->next->next = pTemp1; pHeadNode->next = pHeadNode->next->next; pTemp1->next = pTemp2; } pLastPrevPrev->next = pLast; pLast->next = pLastPrev; pLastPrev->next = NULL; } p = pHeadNode->next; while(p != NULL) { printf("%d ", p->nodeVal); p = p->next; } // write your code here...... return 0; }