码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode_1题——Swap Nodes in Pairs(线性表的链式存储)

时间:2015-04-25 16:30:13      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:

Swap Nodes in Pairs

 Total Accepted: 45110 Total Submissions: 138992My Submissions

 

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.

 

Hide Tags
 Linked List
Have you met this question in a real interview? 
Yes
 
No
 

Discuss

   这道题没啥好说的,主要是线性表的链式存储结构,需要注意的是,在题目的线性表中,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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!