单链表经典OJ题:反转链表

单链表经典OJ题:反转链表_第1张图片

题目:

给你单链表的头节点 head ,i请你反转链表,并返回反转后的链表。

图例:

单链表经典OJ题:反转链表_第2张图片

 分析:

根据链表的特征,反转链表的本质便是改变节点内部的指针方向。

将原先指向下一个节点的指针进行修改,将其的指向修改成指向上一个节点。

解法:

根据分析我们可以得出两种解法:

解法1:

  • 定义新链表,和移除元素的做法类似,但是使用的是头插方法。

解法2:

  • 直接在原链表上改变指针的指向,这里需要运用三个指针。
  • 第一个是最开始的设置为NULL的指针n1
  • 第二个是开始从第一个节点开始遍历的n2
  • 第三个是从第二个节点开始遍历的n3。
  • n2是改变方向的,n3是保存下一个节点位置的,n1是被指方向的,三者同时开始遍历,只是遍历的位置不同。

单链表经典OJ题:反转链表_第3张图片

解法2本质:
  • 本质就是原先 节点 1的 1->next  指向的是2 变成了指向NULL。
  •  原先节点2 的 2->next指向3 变成了指向节点1。
  • 开始遍历的时候,首先将n2的指针指向变成n1,而后n1要变成n2,n2要变成n3,n3要变成n3->next

单链表经典OJ题:反转链表_第4张图片

  • 要注意n3在遍历过程中是最早指向NULL的所以要给n3设定一个判定条件,让n3及时停下。 
  • 另外还要判定这个链表是否有节点,那么就是得判定第一个节点head是否存在。

代码演示:

单链表经典OJ题:反转链表_第5张图片

  • 因为n2最后要变成头节点,所以遍历的判定条件是n2是否为空 

你可能感兴趣的:(C语言,数据结构,链表,数据结构,单链表)