给一个链表,两两交换其中的节点,然后返回交换后的链表。
样例
给出 1->2->3->4
, 你应该返回的链表是 2->1->4->3
。
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: /** * @param head a ListNode * @return a ListNode */ ListNode* swapPairs(ListNode* head) { // Write your code here //如果链表长度为0或者为1直接返回就行,不需要操作 ,经过这步操作之后,链表的长度大于等于2 if(!head || !head->next) return head; ListNode *p=new ListNode(0);//首地址 p->next=head; head=p; ListNode *q=head->next; ListNode *k=q->next; while(k){ //先进行交换 q->next=k->next; k->next=q; p->next=k; //然后进行向前推进 p=q; if(q->next==NULL){ q=NULL; k=NULL; }else{ q=q->next; k=q->next; } } head=head->next; return head; } };