思路1:
分为奇偶链表大小:
进行交换+移动+链接
struct ListNode* swapPairsShit(struct ListNode* head) {
if(head==NULL||head->next==NULL)
{
return head;
}
ListNode* pre;
ListNode* s;
ListNode* temp;
//初始化
temp=head;
pre=head;
s=head->next;
//交换
pre->next=s->next;
s->next=pre;
//回归头指针
head=s;
if(pre->next!=NULL&&pre->next->next!=NULL)
{
//移动
pre=pre->next;
s=pre->next;
}else{return head;}
//移动之后的
while(s->next!=NULL)
{
//交换链接
temp->next=s;
pre->next=s->next;
s->next=pre;
printf(" BEFORE pre->val is %d \n",pre->val);
printf(" BEFORE s->val is %d \n",s->val);
//奇偶处理
if(pre->next->next==NULL)
{
break;
}
//移动
pre=pre->next;
s=pre->next;
printf(" AFTER pre->val is %d \n",pre->val);
printf(" AFTER s->val is %d \n",s->val);
temp=temp->next->next;
printf(" AFTER temp->val is %d \n",temp->val);
}
//差一次交换链接
if(s->next==NULL&&s->next->next==NULL)
{
temp->next=s;
pre->next=s->next;
s->next=pre;
}
return head;
}
思路2
进行递归实现
struct ListNode* swapPairs(struct ListNode* head)
{
//递归
if(headNULL||head->nextNULL)
{
return head;
}
ListNode * preNode;
ListNode * tempNode;
ListNode * node;
preNode=head->next;
node=preNode->next;
preNode->next=head;
head->next=swapPairs(node);
return preNode;
}