公司做网站,要准备哪些素材,h5开发招聘,crm排名,网站备案的意义一#xff1a;题目#xff1a;
给你单链表的头节点 head #xff0c;请你反转链表#xff0c;并返回反转后的链表。
示例 1#xff1a; 输入#xff1a;head [1,2,3,4,5]
输出#xff1a;[5,4,3,2,1]
题目链接#xff1a;力扣#xff08;LeetCode#xff09;官网…
一题目
给你单链表的头节点 head 请你反转链表并返回反转后的链表。
示例 1 输入head [1,2,3,4,5]
输出[5,4,3,2,1]
题目链接力扣LeetCode官网 - 全球极客挚爱的技术成长平台
二解题思路 这道题我们可以用迭代或递归地反转链表。但是这个题更加适合迭代的方法去做。所以我们应该有的一个思维是三个指针立方向。 首先我们要设置三个变量这里的变量不要随便设我们可以从前到后设置n1,n2,n3)
反转链表我们只需要两个就行了但是我们就找不到3了所以需要第三个变量例如下面的图片 但是仅仅分析到这里还是不够的我们需要将新的next指向NULL所以我们需要将n1赋值为NULLn2赋值为1n3赋值为2然后就可以进行反转但是还是有一个问题就是什么时候结束我们可以依次反转下去会发现当n2为NULL时就结束了。上述讲述均以下面的图片为依据 那么这道题就分析完了。 三解题代码
首先我们要想如果这个链表只有一个数甚至没有是空的那就没有解题的意义了所以我们需要先判断这个链表
if(headNULL||head-nextNULL)return head;
然后我们再进行有意义的反转。
struct ListNode* n1NULL,*n2head,*n3head-next;while(n2){ n2-nextn1;迭代反转n1n2;n2n3;if(n3) 这里是为了防止当n2到达NULL时下一步发生空指针异常。n3n3-next;}return n1;这里的n1为链表头所以返回n1
完整代码
/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/
struct ListNode* reverseList(struct ListNode* head) {if(headNULL||head-nextNULL)return head;struct ListNode* n1NULL,*n2head,*n3head-next;while(n2){ n2-nextn1;n1n2;n2n3;if(n3)n3n3-next;}return n1;
}