给定一个非空链表,若想将其反转,需先定义一个新的空链表,prev和next指针均指向null。然后循环进行如下四个步骤直至curr所指节点为null:
1.移动next指针至curr所指节点的下一个节点。
2.将当前节点的后继指针指向prev指针所指节点
3.右移prev指针,使其指向curr所指节点。
4.右移curr节点,使其指向prev所指节点
反转链表的具体实现,如下图,个人认为包含了反转链表的精髓,看懂了也就懂了代码逻辑了。
具体代码实现如下:
1 /* 2 struct ListNode { 3 int val; 4 struct ListNode *next; 5 ListNode(int x) : 6 val(x), next(NULL) { 7 } 8 };*/ 9 class Solution { 10 public: 11 ListNode* ReverseList(ListNode* head) { 12 if(head==nullptr||head->next==nullptr){ 13 return head; 14 } 15 ListNode *xinqianqv=nullptr; 16 ListNode *xinhouji=nullptr; 17 while(head){ 18 xinhouji=head->next;//将后继指针指向当前节点的下一个节点 19 head->next=xinqianqv;//将当前节点的后继指针指向前驱指针所指的节点 20 xinqianqv=head;//右移前驱指针 21 head=xinhouji;//右移当前cur节点 22 } 23 return xinqianqv; 24 } 25 };