目录
前言
一.思路
1)创建新链表
2)创建三个指针
二.代码实现
搭配食用更佳哦~~
数据结构之单单单——链表-CSDN博客
数据结构之单链表的基本操作-CSDN博客
前面学了单链表的相关知识,我们来尝试做一下关于顺序表的经典算法题~
前言
反转链表同样也是力扣上一道简单题,适合刚学过单链表的我们更好的理解链表相关知识~当然最好大家可以先去力扣上自己 try 一下~~
206. 反转链表 - 力扣(LeetCode)https://leetcode.cn/problems/reverse-linked-list/description/
一.思路
题目不多赘述,只要眼珠子不是喘气的都能看懂
1)创建新链表
创建新链表的思路和上一篇讲的大同小异,创建两个头尾指针,将原链表的拿过来进行头插就可以将链表反转 ,因为在此题这种方法算不上最简洁的方法,所以也不多赘述,有兴趣的可以去看上一篇的思路,附上链接~
手撕C语言题典——移除链表元素(单链表)-CSDN博客https://blog.csdn.net/Antigonos/article/details/138647423?spm=1001.2014.3001.5501
2)创建三个指针
我们创建 n1 n2 n3 三个指针,n1 指向空,n2 指向链表的头节点, n3 指向 n2 的下一个节点,也就是头节点的下一个节点,如此便可逐步翻转。我们让 n2 的 next 指针不再指向 n3,而是指向 n1,然后三个指针依次移动,n1 代替 n2 ,n2 代替 n3,n3指向 n2 的下一个节点:
然后再次重复以上步骤,将 n2 指向 n3 的指针指向 n1,到最后 n3 后面没有下一节点了就可以跳出循环,此时 n1 指针指向的就是新链表的头指针了。
创建三指针的思路就可以理顺了:
- 让 n2 的 next 指针指向 n1
- n1 = n2
- n2 = n3
- n3 = n3 -> next
二.代码实现
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
typedef struct ListNode ListNode;
struct ListNode* reverseList(struct ListNode* head) {
//判断为空
if(head==NULL){
return head;
}
//创建三个指针
ListNode*n1,*n2,*n3;
n1 = NULL,n2 = head,n3 = n2->next;
while(n2){
n2->next = n1;
n1 = n2;
n2 = n3;
if(n3)
n3 = n3 -> next;
}
return n1;
}
需要注意的是,题目中给了提示:
我们需要判断链表是否为空,如果为空直接返回头节点就行。
这道题到这就结束啦~是不是还蛮简单的,第二个思路虽然难想一点,但只要理解了代码就非常简洁~~
下一篇会接着将另一道有关链表的算法题~~
🎈🎈完结撒花🎈🎈