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;
}
感谢观看,如果对你有所帮助,点赞支持一下吧!