您的位置:首页 > 其它

两两交换链表中的节点

2017-03-26 11:54 218 查看

给一个链表,两两交换其中的节点,然后返回交换后的链表。

样例

给出 

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;
}
};

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: