题目
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表
思路一:翻转指针法
1、定义两个指针 n1、n2 和 n3,n1 置为空,n2 指向 head,n3 指向 head->next
2、让 n2 结点指向 n1 结点,再把三个指针往后挪
3、让 n2 结点指向 n1 结点,再把三个指针往后挪
4、循环上述步骤,直到 n2 == NULL
代码实现
struct ListNode* reverseList(struct ListNode* head)
{
if (head == NULL)
return NULL;
//初始条件
struct ListNode* n1 = NULL, * n2 = head, * n3 = head->next;
while(n2)//结束条件
{
//迭代过程
n2->next = n1;
n1 = n2;
n2 = n3;
if(n3)
{
n3 = n3->next;
}
}
return n1;//返回头结点
}
思路二:头插法
取原链表的结点头插到新链表
1、定义三个指针 cur、next 和 newhead,cur 指向 head,next 指向 head->next,newhead 置为空
2、让 cur 结点指向 newhead 结点,然后 newhead = cur、cur = next、next = next->next
3、循环执行第二步,直至 cur 为空
代码实现
struct ListNode* reverseList(struct ListNode* head){
if(head == NULL)
return NULL;
struct ListNode* cur = head;
struct ListNode* next = head->next;
struct ListNode* newhead = NULL;
while(cur)
{
cur->next = newhead;
newhead = cur;
cur = next;
if(next)
next = next->next;
}
return newhead;
}