206. 反转链表
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
解法1:遍历
假定链表如下。
遍历这个链表。我们可以定义两个指针n1,n2,分别指向1和2,让2的next指向1。让n1,n2向后移动。如此往复。
但n2的next指向1后,n2和链表后续断开连接了,需要再定义一个指针n3存储n2的下一节点地址。
链表的最后一个元素的next需要指向NULL,我们让n1指向NULL。
遍历链表,设置n2为循环条件,当n2为NULL停止循环。此时n1就指向链表头部。
代码示例:
struct ListNode* reverseList(struct ListNode* head) {
if (head == NULL || head->next == NULL) //如果只有链表为NULL或者链表只有一个元素就直接返回。
{
return head;
}
struct ListNode* n1 = NULL, * n2 = head, * n3 = head->next; //双指针迭代。n3用来保存next。
while (n2)
{
n2->next = n1;
n1 = n2;
n2 = n3;
if (n3)//防止对空指针解引用操作
n3 = n3->next;
}
return n1; //返回链表head
}