题意理解
翻转单链表
问题分析
思路是设置两个指针,一个是新链表头,一个是旧链表头。首先判断链表为空,直接返回空;然后设置新链表初始节点,接着循环旧链表节点,如果旧链表节点不空,先用next保留后续节点,再将旧链表节点连接上新链表头,然后将新链表头移动到旧链表头上(目的是插到新链表最前面),旧头结点再指向之前保留的后续节点next。
其他
参考
https://gitee.com/xiexie1357/STLearn/blob/master/STLport-5.2.1/stlport/stl/_slist_base.c
__reverse方法实现
链接
ListNode* reverseList(ListNode* head) {
if (!head) //链表为空
return NULL; //返回空
ListNode* result = head; //新头结点指向当前结点
head = head -> next; //原头结点后移
result -> next = NULL; //新头结点后继设置为空(变成尾结点)
while(head) //原头结点不空
{
ListNode* next = head -> next; //保存后续结点
head->next = result; //旧头节点连接上新头节点
result = head; //新头节点指向旧头节点
head = next; //旧头节点指向之前保存的后继结点
}
return result; //返回新头节点
}