您的位置:首页 > 其它

8.通过调整链来交换两个相邻的元素

2013-11-29 16:14 239 查看
/*通过调整链来交换两个相邻的元素*/
/*单链表*/
#include<iostream>

using namespace std;

struct ListNode{
	int value;
	ListNode * pNext;
};

void addListNode(ListNode * & p, int v){
	if(NULL == p){
		ListNode * pTem = new ListNode;
		pTem->pNext = NULL;
		pTem->value = v;
		p = pTem;
	}
	else
		addListNode(p->pNext,v);
}

void swap(ListNode * & p){		//chang the neighboring node;
	if(NULL == p)
		return;

	ListNode * p1;
	ListNode * p2;

	p1 = p->pNext;
	p2 = p1->pNext;

	p1->pNext = p2->pNext;
	p->pNext = p2;
	p2->pNext = p1;
}

void traverse(ListNode * p){			//traverse the list and output the value
	while(NULL != p)
	{
		cout << p->value << " ";
		p=p->pNext;
	}
	cout << endl;
	return;
}

int main(){
	ListNode * pHead = NULL;

	addListNode(pHead,1);
	addListNode(pHead,2);
	addListNode(pHead,3);
	addListNode(pHead,4);
	addListNode(pHead,5);
	
	traverse(pHead);
	swap(pHead->pNext);
	traverse(pHead);

	return 0;
}

/*双链表*/

#include<iostream>

using namespace std;

struct ListNode{
	int value;
	ListNode * pNext;
	ListNode * pPre;
};

ListNode * pTail;

void addListNode(ListNode * & p, int v){
	if(NULL == p){
		if( NULL == pTail){
			ListNode * pTem = new ListNode;
			pTem->pNext = NULL;
			pTem->pPre = NULL;
			pTem->value = v;
			p = pTem;
			pTail = pTem;
		}
		else{
			ListNode * pTem = new ListNode;
			pTem->pNext = NULL;
			pTem->pPre = pTail;
			pTem->value = v;
			p = pTem;
			pTail = pTem;
		}
	}
	else
		addListNode(p->pNext,v);
}

void swap(ListNode * & p){		//chang the neighboring node;
	if(NULL == p)
		return;

	ListNode * p1;
	ListNode * p2;

	p1 = p->pNext;
	p2 = p1->pNext;

	p1->pNext = p2->pNext;
	p2->pNext->pPre = p1;

	p->pNext = p2;
	p2->pPre = p;

	p2->pNext = p1;
	p1->pPre = p2;
}

void traverse(ListNode * p){			//traverse the list and output the value
	while(NULL != p)
	{
		cout << p->value << " ";
		p=p->pNext;
	}
	cout << endl;
	ListNode * p1 = pTail;
	while(NULL != p1)
	{
		cout << p1->value << " ";
		p1 = p1->pPre;
	}
	cout << endl;
	return;
}

int main(){
	ListNode * pHead = NULL;
	pTail = NULL;

	addListNode(pHead,1);
	addListNode(pHead,2);
	addListNode(pHead,3);
	addListNode(pHead,4);
	addListNode(pHead,5);
	
	traverse(pHead);
	swap(pHead->pNext);
	traverse(pHead);

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