标签:
Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given 1->2->3->4, you should return the list as 2->1->4->3.
Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.
Linked List
这道题没啥好说的,主要是线性表的链式存储结构,需要注意的是,在题目的线性表中,head头结点是第一个结点。
#include<iostream>
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* swapPairs(ListNode* head) {
ListNode* ptr=head;
ListNode* ptr0;
ListNode* ptr1;
ListNode* ptr2;
ListNode* temp;
if(head==NULL)
return ptr;
if(ptr->next==NULL)
return ptr;
ptr0=ptr;
ptr1=ptr0->next;
ptr0->next=ptr1->next;
ptr1->next=ptr0;
temp=ptr0;
ptr0=ptr1;
ptr1=temp;
ptr=ptr0;
ptr2=ptr1->next;
if(ptr2==NULL)
return ptr;
ptr2=ptr2->next;
if(ptr2==NULL)
return ptr;
ptr1=ptr1->next;
ptr0=ptr0->next;
while(1)
{
ptr1->next=ptr2->next;
ptr2->next=ptr1;
ptr0->next=ptr2;
temp=ptr1;
ptr1=ptr2;
ptr2=temp;
if(ptr2->next==NULL)
return ptr;
ptr2=ptr2->next;
ptr1=ptr1->next;
ptr0=ptr0->next;
if(ptr2->next==NULL)
return ptr;
ptr2=ptr2->next;
ptr1=ptr1->next;
ptr0=ptr0->next;
}
return ptr;
}
若是题目中的线性表的存储的头结点没有存储数据的话,又是另外一种做法了
ListNode* swapPairs(ListNode* head)
{
ListNode* ptr;
ListNode* ptr0;
ListNode* ptr1;
ListNode* ptr2;
ListNode* temp;
ptr=ptr0=head;
if(ptr==NULL)
return ptr;
if(ptr->next==NULL)
return ptr;
ptr1=ptr0->next;
if(ptr1->next==NULL)
return ptr;
ptr2=ptr1->next;
while(1)
{
ptr1->next=ptr2->next;
ptr2->next=ptr1;
ptr0->next=ptr2;
temp=ptr1;
ptr1=ptr2;
ptr2=temp;
if(ptr2->next==NULL)
return ptr;
ptr2=ptr2->next;
ptr1=ptr1->next;
ptr0=ptr0->next;
if(ptr2->next==NULL)
return ptr;
ptr2=ptr2->next;
ptr1=ptr1->next;
ptr0=ptr0->next;
}
return ptr;
}
int main()
{
ListNode* head;
head=(ListNode*)malloc(sizeof(ListNode));
head->val=1;
ListNode* ptr2;
ptr2=(ListNode*)malloc(sizeof(ListNode));
head->next=ptr2;
ptr2->next=NULL;
ptr2->val=2;
cout<<head->val<<‘ ‘<<head->next->val<<endl;
ListNode* head1;
head1=swapPairs(head);
cout<<head1->val<<‘ ‘<<head1->next->val<<endl;
}
leetcode_1题——Swap Nodes in Pairs(线性表的链式存储)
标签:
原文地址:http://www.cnblogs.com/yanliang12138/p/4456088.html