基本思路
listNode.png从前往后遍历链表,定义三个指针分别指向相邻三个结点。
反转前两个结点,即让第二个结点指向第一个结点。
然后依次往后移动指针,直到第二个结点为空循环结束。
最后再处理链表头尾即可。
代码实现
//节点定义
struct ListNode {
int val;
ListNode *next;
ListNode (int _val):val (_val),next (nullptr) { }
};
ListNode* ReverseList(ListNode *head){
if (head == nullptr || head->next == nullptr){
return head;
}else{
ListNode *p1 = head;
ListNode *p2 = p1->next;
ListNode *p3 = p2->next;//p3为了记录p2后的节点是否为空
while (p2) {
p3 = p2->next;
p2->next = p1;
p1 = p2;
p2 = p3;
}
head->next = nullptr;
head = p1;
return head;
}
}
网友评论