指针解法 (效率较高)
struct ListNode* reverseList(struct ListNode* head)
{
if(head ==NULL) // 空链表
{
return NULL ;
}
struct ListNode* n1 = NULL ;
struct ListNode* n2 = head ;
struct ListNode* n3 = n2->next ;
while ( n2) //翻转
{
n2->next=n1 ;
n1 = n2 ;
n2 = n3;
if(n3)
{
n3 =n3->next;
}
}
return n1 ;
}
思路二
取原来的节点 头插到新链表
不能直接把原来的节点拿下来头插 ,否则就无法找到下一个节点的位置
解决方法: 可以先保存下一个节点的地址 ,再把原来的节点拿下来头插
struct ListNode* reverseList(struct ListNode* head)
{
struct ListNode* cur = head ;
struct ListNode * newhead = NULL ;
if ( head == NULL) //空链表
{
return NULL;
}
// 不是空链表
while ( cur)
{
struct ListNode * next = cur->next ; //保存下一个节点的地址
//头插
cur->next =newhead ;
newhead =cur ;
cur=next ;
}
return newhead ;
}
如果你觉得这篇文章对你有帮助,不妨动动手指给点赞收藏加转发,给鄃鳕一个大大的关注
你们的每一次支持都将转化为我前进的动力!!!