单链表的逆置是一个很有趣的问题,同时也是很多公司在面试时经常会拿出来“为难”面试者的题,比如博主在面试Microsoft的时候就被问到了这个问题。
问题描述:写一个程序,创建一个单向链表,并通过逆置函数使得该链表的方向反转,即头变尾,尾变头。
比如一个链表是这样的:1 -> 2 -> 3 -> 4 -> 5,逆置后则变成:5 -> 4 -> 3 -> 2 -> 1。
分析:该问题可以有两种解法,一种是交换节点的数据,而不改变其内存的存储结构;第二种是改变所有节点的指向下一个节点的指针。
**显然第二种方法更加有效。
----------我---是---分---割---线-----------------------------------
代码描述:
1. 创建节点结构体
//创建链表节点结构体
struct node
{
int data;
node *next;
};
*这里补充说明一下C++语言与C语言创建结构体的区别
在C语言中定义一个结构体需要用到 "typedef"
typedef struct Student
{
int id;
}Stu;
结构体名为Student,此处的Stu相当于struct Student的别名,在声明变量时,可以直接用Stu st1,相当于struct Student st1。当然,这里的结构体类型名Student也可以省略不写。
但在C++中定义结构体则更为简洁