6-4 翻转链表(C++版) (25分)
本题要求实现翻转一个链表的功能。链表类ListNode的定义已经给出。要求在Solution类中给出有关函数的实现。
输入样例:
10
81 70 49 70 88 84 51 65 60 59
输出样例:
59 60 65 51 84 88 70 49 70 81
只有23分,有一个数据点答案错误,希望大家指正
#include<iostream>
using namespace std;
class ListNode
{
public:
int val;
ListNode *next;
ListNode(int val)
{
this->val = val;
this->next = NULL;
}
};
class Solution
{
public:
int i;
ListNode* reverse(ListNode * head)
{
if(head==NULL) return NULL;
ListNode* pre=head;
ListNode* cur=head->next;
pre->next=NULL;
while(cur!=NULL)
{
ListNode* tmp=cur->next;
cur->next=pre;
pre=cur;
cur=tmp;
}
return pre;
}
ListNode* buildList(int* arr,int n)
{
ListNode *head,*p2,*p1;
if(n==0)
{
head=NULL;
return NULL;
}
if(n==1)
{
head=new ListNode(arr[0]);
return head;
}
else
{
for(i=0;i<n;i++)
{
if(i==0)
{
head=new ListNode(arr[0]);
}
else
{
if(i==1)
{
p1=new ListNode(arr[i]);
p2=p1;
head->next=p1;
p1=p1->next;
}
else
{
p1=new ListNode(arr[i]);
p2->next=p1;
p2=p2->next;
p1=p1->next;
}
}
}
return head;
}
}
void printList(ListNode* head)
{
ListNode* p;
if(head==NULL) return;
for(p=head;p!=NULL;p=p->next)
{
if(p!=head) cout<<" ";
cout<<p->val;
}
cout<<endl;
}
};
int main()
{
int n;
cin>>n;
int* arr = new int[n];
for(int i=0;i<n;i++)
cin>>arr[i];
Solution obj;
ListNode* head = obj.buildList(arr,n);
head = obj.reverse(head);
obj.printList(head);
delete[] arr;
return 0;
}