两两交换链表中的节点:
先把一个链表分为两个链表,再把两个链表组成一个链表。
注意最后可能有一个链表有剩余,但此时另一个链表的指针已经到了NULL,要再遍历一遍/提前记录(感觉有点麻烦)。
class Solution { public: ListNode* swapPairs(ListNode* head) { if(head==NULL||head->next==NULL) return head; ListNode* new1=new ListNode(),*e1=new1; ListNode* new2=new ListNode(),*e2=new2; int n=0; ListNode* p=head; while(p){ if(n%2==0){ e1->next=p; e1=p; p=p->next; } else{ e2->next=p; e2=p; p=p->next; } n++; } e1->next=NULL; e2->next=NULL; p=new2->next; //2的遍历指针 ListNode* q=new1->next; //1的遍历指针 while(1){ if(p==NULL||q==NULL) break; ListNode* next2=p->next; //2的后节点 ListNode* next1=q->next; //1的后节点 p->next=q; q->next=next2; q=next1; p=next2; } p=new1; if(q!=NULL) { while(p->next) p=p->next; p->next=q; q->next=NULL; } return new2->next; } };
标签:24,力扣,head,ListNode,next,链表,new2,NULL From: https://www.cnblogs.com/bhd123/p/17226982.html