标签:body list markdown public lint c代码 problem www. turn
原题网址:https://www.lintcode.com/problem/swap-nodes-in-pairs/description
给一个链表,两两交换其中的节点,然后返回交换后的链表。
给出 1->2->3->4
, 你应该返回的链表是 2->1->4->3
。
你的算法只能使用常数的额外空间,并且不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
/**
* Definition of singly-linked-list:
* class ListNode {
* public:
* int val;
* ListNode *next;
* ListNode(int val) {
* this->val = val;
* this->next = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param head: a ListNode
* @return: a ListNode
*/
ListNode * swapPairs(ListNode * head) {
// write your code here
if (head==NULL)
{
return head;
}
ListNode *tmp=NULL;
ListNode * newhead=new ListNode(0);
ListNode *pre=newhead;//被挂载的前驱节点;
while(head!=NULL&&head->next!=NULL)
{
tmp=head->next->next;//保存后续节点地址;
//交换;
pre->next=head->next;
head->next->next=head;
head->next=NULL; //防止出现闭环;
pre=head;
head=tmp;
}
if (head!=NULL)//若链表节点个数为奇数,将最后一个节点挂载上去;
{
pre->next=head;
}
return newhead->next;
}
};
标签:body list markdown public lint c代码 problem www. turn
原文地址:https://www.cnblogs.com/Tang-tangt/p/9245830.html