力扣206 反转链表
1、反转链表的常见几种:
头插法;双指针方法;
头插法创建一个新节点再头插比较合适;如果在原来的链表头插法,要对第一个元素的next在适当的时候变为NULL。
双指针的方法比较好用,用两个指针一前一后实现链表反转。
双指针:
class Solution { public: ListNode* reverseList(ListNode* head) { ListNode* pre=NULL; ListNode* p=head; while(p){ ListNode* next=p->next; p->next=pre; pre=p; p=next; } return pre; } };
新建节点头插:
class Solution { public: ListNode* reverseList(ListNode* head) { ListNode* n1=new ListNode(0,NULL); //新建的是节点 ListNode* p=head; //新建的是指针 while(p){ ListNode* m=p->next; ListNode*q =n1->next; n1->next=p; p->next=q; p=m; } return n1->next; } };