题解 | #双指针——链表的奇偶重排#
链表的奇偶重排
https://www.nowcoder.com/practice/02bf49ea45cd486daa031614f9bd6fc3
/** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : val(x), next(nullptr) {} * }; */ /*第一个结点位置是奇数,第二个是偶数,初始化两个指针p1指向头节点,p2指向头节点的下一个结点。 那么将p1指向p2的后一个结点,也就是偶节点位置,p1后移一位; p2指向p1的后一个结点,也就是奇节点位置,p2后移一位,一次类推 注意空节点单独判断, ListNode *p2=head->next;会报错*/ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param head ListNode类 * @return ListNode类 */ ListNode* oddEvenList(ListNode* head) { // write code here if(head == nullptr) return head; ListNode *p1 = head; ListNode *p2=head->next; ListNode *ymm = p2; while (p2!=nullptr && p2->next !=nullptr) { p1->next = p2->next; p1 = p1->next; p2->next = p1->next; p2= p2->next; } p1 ->next = ymm; return head; } };