题解 | 牛牛的链表交换
牛牛的链表交换
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;
}
查看10道真题和解析