我们继续来看一下单链表的题目和代码吧,把学习的知识运用到实际中,大家加油
先看OJ题目
OJ题目(反转单链表)
双指针法
1.创建两个指针,为pre curr,curr指向头结点,curr用来遍历链表
2.curr指向下一个结点,要让这个结点的next 指向pre,当然我们首先要保存curr的next指针,保存在temp中,以免找不到
3.采用循坏的时候记得更新指针
代码
struct ListNode* reverseList(struct ListNode* head) {
struct ListNode*curr=head;
struct ListNode*pre=NULL;
while(curr)
{
struct ListNode*temp=curr->next;
curr->next=pre;
pre=curr;
curr=temp;
}
return pre;
}
递归法
思想和双指针的一样,但是采用了递归的形势
代码:
struct ListNode* reverse(struct ListNode* curr, struct ListNode* prew) {
if (!curr) {
return prew;
}
struct ListNode* temp = curr->next;
curr->next = prew;
return reverse(temp, curr);
}
struct ListNode* reverseList(struct ListNode* head)
{
return reverse(head, NULL);
}
希望对你有所帮助,希望可以收到一个赞呀~~