您的位置:首页 > 职场人生

面试题16—反转链表

2017-06-26 15:42 369 查看
题目:输入链表的头结点,反转该链表并输出反转后链表的头结点。

代码示例:

#include<iostream>
using namespace std;
struct Node
{
int data;
Node *next;
};
class List
{
Node *head;
public:
List(){
head = NULL;
}
~List();
void CreateList(int a[], int n);
void Disp(void);
void InverseList(void);
};
List::~List(void)
{
Node *p = head;
while (p)
{
Node *q = p->next;
delete p;
p =q;
}
}
void List::CreateList(int a[], int n)
{
if (a == NULL || n <= 0)
return;

head = new Node();
head->data = a[0];
Node *current=head;
for (int i = 1; i < n; i++)
{
Node *p = new Node();
p->data = a[i];
current->next = p;
current = p;
}
current->next = NULL;
}
void List::Disp(void)
{
Node *p = head;
while (p)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
void List::InverseList(void)
{
if (head == NULL || head->next == NULL)
return;
Node *p = head->next;
head->next = NULL;
while (p)
{
Node *q = p->next;
p->next = head;
head = p;
p = q;
}
}
int main()
{
const int n = 5;
int a
= {5,7,9,0,8};
List mylist;
mylist.CreateList(a, n);
cout << "原链表:";
mylist.Disp();

cout << "逆置后的链表:";
mylist.InverseList();
mylist.Disp();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: