C++实现单链表反转
以LeetCode上的题剑指Offer 24反转链表为例讲解
class Solution {
public:
ListNode* reverseList(ListNode* head) {
//定义新头节点,这个头结点就是最后要返回的节点
ListNode* new_head = NULL;
while(head)
{
ListNode* next = head->next;//用next保存下面要用的节点,目的是保证循环的持续性
head->next = new_head;
new_head = head;
head = next;//head指向了原来的地址
}
return new_head;
};
};
解题思路如下
我用的方法是遍历整个单链表的同时新建新的链表。
第一次遍历时:
head->next = new_head;//这里的head->next是指node1,因为new_head = NULL,所以node1会指向NULL
new_head = head;//这里new_head指向了head,可以因为head是指向node1的,所以这里new_head也会指向node1
head = next;这里head回到前面的状态,head节点指向node1节点
所以新的链表中有了如下的关系
第二次遍历时
这时这里的head->next是指node2
然后把node2插入到node1前面
.
.
.
以此类推
最简单的说法就是把每个节点按顺序拿出来,然后依次放在新的链表里,最后返回这个链表的头结点。
原来的链表中顺序是node1,node2,…,nodeN
新的节点中插入的时候先插入node1,然后在node1前面插入node2,依次类推把nodeN插入到最前面
这是第一个正式发的博文,希望大家给宝贵的建议。