反转链表

题目描述:将链表进行反转

代码如下:

<pre name="code" class="cpp"><span style="font-size:14px;">#include<iostream>
#include<vector>
using namespace std;

//链表创建
struct ListNode{
	int val;
	ListNode*next;
	ListNode(int x) :val(x), next(NULL){}
};

class Solution{
public:
	//链表反转函数
	ListNode* ReverseList(ListNode* head){
		if (head == NULL || head->next == NULL)
			return head;
		//创建last作为head的下一个节点
		ListNode* last = new ListNode(NULL);
		//一定要主要,head的下一个节点为空
		last = head->next;
		head->next = NULL;
		ListNode* mid = new ListNode(NULL);
		while (last){
			mid = last->next;
			last->next = head;
			//头节点时已经反转链表的头节点
			head = last;
			last = mid;
		}
		return head;
	}
};

//测试代码
int main(){
	//创建链表
	ListNode* head = new ListNode(NULL);
	ListNode* head1 = new ListNode(NULL);
	int val;
	cout << "创建链表: ";
	while (cin >> val&&val){
		//如果头节点为空
		if (head->val == NULL){
			head->val = val;
			head1 = head;
		}
		//如果头节点不为空
		else
		{
			ListNode* head2 = new ListNode(val);
			head1->next = head2;
			head1 = head1->next;
		}
	}
	//尾节点下一个节点为空
	head1->next = NULL;

	//输出反转的链表
	Solution solution;
	ListNode* head3 = solution.ReverseList(head);
	cout <<endl<<"------------------------"<<endl<<endl<< "反转的链表输出为: ";
	while (head3 != NULL){
		cout << head3->val << " ";
		head3 = head3->next;
	}
	cout << endl;
	system("pause");
	return 0;
}</span>



测试结果如下:





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章