思路:
首先,要断开链表,然后摘除节点,利用头插法进行反转链表。
struct ListNode* reverseList(struct ListNode* head) {
if(head == NULL || head->next == NULL)
return head; //表示当链表为空或者链表只有一个元素的时候,直接返回头结点。
//断开链表
struct ListNode *p = head->next;
head->next = NULL;
//摘除节点进行头插
while(p != NULL)
{
struct ListNode *q = p->next;
p->next = head;
head = p;
p = q;
}
return head;
}
创建一个指针p = head->next,此时p就在2的位置。
head->next = NULL 作用就是断开1与2的链接。
while循环,创建一个指针q = p->next,此时q就在3的位置。
p->next = head 此时2移动到了最前面。
接着head = p; 就是将2设为头结点
p = q;将p指针移到3的位置,接下来再次执行while循环,做以上的操作。
(思路借鉴鲍松山老师)