1.链接:. - 力扣(LeetCode)【点击即可跳转】
思路:创建三个指针,看下图
注意:n3如果为空,则不能继续指向下一节点,需要进行判断
代码实现:
struct ListNode* reverseList(struct ListNode* head)
{if(head==NULL)//头节点为空,直接返回{return head;}//创建三个指针struct ListNode* n1,*n2,*n3;n1=NULL, n2=head, n3=head->next;while(n2!=n3){n2->next=n1;n1=n2;n2=n3;if(n3)//n3如果为空,则不能继续指向下一节点n3=n3->next;}return n1;
}
2.链接:. - 力扣(LeetCode)【点击即可跳转】
思路:快慢指针 【slow每次走1步,fast每次走2步】
循环一次:
循环两次:
在奇数个节点中成立,偶数个节点中也是可行的。
代码实现:
struct ListNode* middleNode(struct ListNode* head)
{//创建快慢指针struct ListNode*slow=head;struct ListNode*fast=head;while(fast&&fast->next){slow=slow->next;fast=fast->next->next;}//此时slow刚好指向的就是中间节点return slow;
}
感谢观看,如果对你有所帮助,点赞支持一下吧!