算法(16)链表-单链表-双链表-逆序-C++代码

单链表,双向链表实现逆序,C++代码,供大家参考。
一般Node用struct定义,我这用的class.
void reverseList_main()为主函数。

class Node {
public:
	int m_value;
	Node *next;
	//构造函数
	Node(int value);
};
Node::Node(int value)
{
	m_value = value;
}
class doubleNode {
public:
	int m_value;
	doubleNode *next;
	doubleNode *last;
	doubleNode(int value);
};
doubleNode::doubleNode(int value)
{
	m_value = value;
}


 

void printLinkedList(Node *head) 
{	
	while (head != nullptr)
	{		
		cout << "head.value= " << head->m_value <<endl;
		head = head->next;
	}
	
}
void printDLinkedList(doubleNode* head)
{
	while (head != nullptr)
	{
		cout << "head.value= " << head->m_value << endl;
		head = head->next;
	}

}

// 后往前 next head1 pre
Node* reverseList(Node* head) {
	Node* pre = nullptr;
	Node* next = nullptr;
	while (head!= nullptr) {
		next = head->next;
		head->next = pre;
		pre = head;
		head = next;
	}
	return pre;

}

doubleNode* reverseDList(doubleNode * head)
{
	doubleNode* pre = nullptr;
	doubleNode* next = nullptr;
	while (head != nullptr) {
		next = head->next;
		head->next = pre;
		head->last = next;
		pre = head;
		head = next;
	}
	return pre;
}


//主函数
void reverseList_main()
{
	cout << "reverseList *************" << endl;
	Node* pnode1 = new Node(7);
	Node* pnode2 = new Node(8);
	Node* pnode3 = new Node(9);
	Node* pnode4 = new Node(10);
	pnode1->next = pnode2;
	pnode1->next->next = pnode3;
	pnode1->next->next->next = pnode4;
	printLinkedList(pnode1);
    Node* rcp=reverseList(pnode1);
	printLinkedList(rcp);


	cout << "reverseDList *************" << endl;
	doubleNode* pDnode1 = new doubleNode(11);
	doubleNode* pDnode2 = new doubleNode(22);
	doubleNode* pDnode3 = new doubleNode(33);
	doubleNode* pDnode4 = new doubleNode(44);

	
	pDnode1->next = pDnode2;
	pDnode1->next->next = pDnode3;
	pDnode1->next->next->next = pDnode4;
	printDLinkedList(pDnode1);
	doubleNode* rcdp = reverseDList(pDnode1);
	printDLinkedList(rcdp);

     delete  pnode1 ;
     delete  pnode2 ;
     delete  pnode3 ;
     delete  pnode4 ;

     delete  pDnode1;
     delete  pDnode2;
     delete  pDnode3;
     delete  pDnode4;



}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值