
思路:
设定一个dummy虚拟头节点 [注意:需要使用malloc分配好内存],两个指针,pre在后,cur在前,先链接后面的节点,避免链表丢失,循环进入下一轮的要注意指针的位置,剩下就是常规操作
c
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* swapPairs(struct ListNode* head) {
struct ListNode* dummy=(struct ListNode*)malloc(sizeof(struct ListNode));//设置虚拟头节点
struct ListNode* pre;
struct ListNode* cur;
dummy->next=head;//初始化
pre=dummy;
cur=dummy->next;
while(cur!=NULL&&cur->next!=NULL)
{
pre->next=cur->next;
cur->next=cur->next->next;
pre->next->next=cur;
pre=cur;//指针往后跳
cur=cur->next;
}
return dummy->next;
}