链表 和 如何进行逆转链表

链表是一种基础的数据结构,但是并不是像数组那样按顺序存储数据,而是在每一个节点里存指向下一个节点的指针.

4153a6b173624f54b11a5b212e4f4acd.jpeg

与数组不同的是每个节点不能通过下标进行直接访问,并且每个节点的位置也不是像数组里的数一样相邻,链表里的节点只能从首到尾逐个访问.

那么我们如何定义链表呢?其实很简单采用结构体的定义方式即可:
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指向下一个  这个过程可能文字比较不易懂那我们直接看码

8c7092d55deb4a0a874416ba3260fa59.png   (图中的b是已经定义好了的指针)

那么我们也就完成了指针的逆转

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值