反转链表
反转一个单链表。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
方法一-前插法:
这道题目我们可以先创建一个新的表头,然后按正序每抓取到一个原链表的节点,就前插到这个新的链表里,最后我们就可以得到一个恰好为原链表反序的新链表:
struct ListNode* reverseList(struct ListNode* head)
{
struct ListNode* new = NULL;
while(head!=NULL)
{
struct ListNode* temp = head;
head = head->next;
temp->next = new;
new = temp;
}
return new;
}
方法二-三指针法
这里还有一种实现思路:当每次到达一个节点时,便修改节点使它指向前一个节点,这样我们就在原位置实现了链表反转,因为题目是单向链表,所以我们需要设定一个Prev来储存前一个节点的位置,再用一个next变量存放下一个节点,使用go变量来遍历链表,这就是三指针法;
struct ListNode* reverseList(struct ListNode* head) //在得到节点时原位置直接改变
{
if(head==NULL)
{return head;}
struct ListNode* prev = NULL;
struct ListNode* next = head->next;
for(struct ListNode* go = head;go!=NULL;)
{
go->next=prev;
prev =go;
go = next;
if(next!=NULL)
{next = next->next;}
}
return prev;
}

842

被折叠的 条评论
为什么被折叠?



