面试题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();
}
代码示例:
#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();
}
相关文章推荐
- 【剑指Offer学习】【面试题16 :反转链表】
- 面试题16:反转链表
- 面试题16:反转链表
- 面试题16:反转链表
- 剑指Offer系列-面试题16:反转链表
- 剑指offer面试题16——反转链表
- 剑指offer_面试题16_反转链表(两种方法)
- (未完成)《剑指offer》(面试题16):反转链表
- 剑指Offer之面试题16:反转链表
- 剑指offer——面试题16:反转链表
- 《剑指Offer》读书笔记--面试题16:反转链表
- 剑指offer:面试题16 反转链表
- 面试题 16:反转链表
- 《剑指Offer》面试题16:反转链表
- 面试题16 反转链表
- 【剑指offer】面试题16、反转链表
- 【面试题16】反转链表
- 【剑指Offer】面试题16:反转链表
- 剑指Offer面试题16反转链表(递归和非递归),面试题17合并两个排序的链表(递归)
- 面试题16:反转链表