链接. - 力扣(LeetCode)
第一种
先来讲下最简单的算法,创建一个新链表,将原链表的元素挨个头插到新链表上,就实现了顺序表的逆转,这里就不示例代码了,在之前的链表有提及。
第二种
可以试试将整个链表倒置,就是创建三个指针,
让n1指向空,n2指向头,n3指向head->next
接着进入循环,我们选不探讨循环条件,先研究循环语句,n2的next要存储n1,就是为了使最后的链表的next的空,n1=n2,n2=n3,if(n3)n3=n3->, n1是整个链表,n2=n3是为了指向后面的元素,在将后面的元素插入到n1前面,然后再让n1是指向头节点,最后5就是新的头节点。
typedef struct ListNode ListNode;
struct ListNode* reverseList(struct ListNode* head) {
if(head==NULL)
{
return head;
}
else
{
ListNode *n1,*n2,*n3;
n1=NULL,n2=head,n3=n2->next;
while(n2)
{
n2->next= n1;
n1=n2;
n2=n3;
if(n3)
{
n3= n3->next;
}
}
return n1;
}
}
最后运行结果