/** * struct ListNode { * int val; * struct ListNode *next; * }; */ /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @return ListNode类 */ struct ListNode* oddEvenList(struct ListNode* head ) { //思路 //对超过2个结点的原链表进行重排,以第1结点为奇数结点的起始插入点,第2结点为偶数结点的起始插入点 //从第3个结点开始,将奇数序号的结点依次插入奇数插入点 struct ListNode *oddInsertNode = NULL; struct ListNode *moveNode = NULL; //操作结点 struct ListNode *moveNodePre = NULL; //操作结点 int cnt = 3; if (head == NULL || head->next == NULL || head->next->next == NULL) { //不超过2个结点,直接输出 return head; } oddInsertNode = head; moveNodePre = head->next; moveNode = moveNodePre->next; while (moveNode) { if (cnt % 2 != 0) { //将奇数序号的结点依次放置在奇数插入点后 moveNodePre->next = moveNode->next; moveNode->next = oddInsertNode->next; oddInsertNode->next = moveNode; moveNode = moveNodePre->next; oddInsertNode = oddInsertNode->next; //后移奇数插入点 } else { //偶数结点不动 moveNodePre = moveNodePre->next; moveNode = moveNodePre->next; } cnt++; } return head; }