链表是一种基础的数据结构,但是并不是像数组那样按顺序存储数据,而是在每一个节点里存指向下一个节点的指针.
与数组不同的是每个节点不能通过下标进行直接访问,并且每个节点的位置也不是像数组里的数一样相邻,链表里的节点只能从首到尾逐个访问.
那么我们如何定义链表呢?其实很简单采用结构体的定义方式即可:
eg:
struct Listnode{
int date;(是链表内的数据,可以是任意类型)
Listnode *next;(指针指向下一个节点)
};
当我们在主函数里要建立链表时,应该从节点后往前建立
eg:
Listnode node5 = { 5,NULL };(因为尾节点后面没有节点所以指向空)
Listnode node4 = { 4,&node5 };(4->5以此类推)
Listnode node3 = { 3,&node4 }; 注: { }中的第一个数据代表存放的值,第二个数据则是指向的位置
Listnode node2 = { 2,&node3 };
Listnode node1 = { 1,&node2 };
那么我们现在如果将这个链表打印出来就会得到: 1 2 3 4 5; 当然因为只是链表所以我比较习惯这样打印 1->2->3->4->5;
那么现在我们已经将链表给建立好了,那么该如何逆转呢?
首先我们来讲述下思路,就是建立两个指针下x,j(x表示先前的,j表示当前的)我们用这两个指针一前一后去访问,如何j的指针指向x所在节点,x到j的位置去,然后j指向下一个 这个过程可能文字比较不易懂那我们直接看码
(图中的b是已经定义好了的指针)
那么我们也就完成了指针的逆转