leetcode2130反转链表

  1. 1尾插法:记录前面的节点,使后面的节点指向前面的节点;记后面的节点为now。因为要不停移动now,使其移动所以要临时记录原来之后的节点。
ListNode* now=slow->next;
ListNode* pre=nullptr;
while(now){
  ListNode* node=now->next;
  now->next=pre;
  pre=now;//移动前面的指针指向后面的节点
  now=node;//移动后面指针继续翻转         
} 
slow->next=pre;//将两节连起来
  1. 2就地逆置法:和头插法有异曲同工之妙。相比第一种方法节约了内存开销。

先删除后面的节点(记为now),再头部插入;然后更新现在的头节点;在继续更新now选择新的节点进行翻转。

删除节点

 1 pre->next=now->next;//删除了now 

ListNode* now=slow->next;//slow->next永远是头节点
while(now->next){//继续翻转之后的节点
  ListNode* node=now->next;//记录原来之后的节点,以便之后继续进行翻转节点
  now->next=node->next;//删除node
  node->next=slow->next;//将node插入至头部
  slow->next=node;//把头节点更新       
}

 

posted @ 2023-07-17 15:27  iu本u  阅读(11)  评论(0)    收藏  举报