题目描述:将链表进行反转
代码如下:
<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>
测试结果如下: