反转链表的具体实现

给定一个非空链表,若想将其反转,需先定义一个新的空链表,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 };

 

posted @ 2020-12-02 14:38  昆山皮皮虾  阅读(135)  评论(0)    收藏  举报