206. 反转链表 - 力扣(LeetCode)
思路
思路:直接有一个叫移除链表元素的oj,我们在那里因为不想再原链表上修改节点指向,那这个题我们能不能用那个思路呢,其实想一想先拷贝再改变,也挺麻烦的。所以我们采用3个指针来解决,首先n1赋值为null,n2赋值为head,n3为head的next,然后以n2为真为条件进行改变,注意这里oj传的是一级指针,一级指针是不会改变原链表节点的指向的,
我们的原链表它肯定是不会改变,只不过在当前的这个oj函数内,此时head它是一个形参,也就是它是一个新的变量,head的指向指到了新的节点,但是对于原链表来说不会改变的。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
typedef struct ListNode ListNode;
struct ListNode* reverseList(struct ListNode* head) {
if(head==NULL)
{
return head;
}
ListNode* n1,*n2,*n3;
n1=NULL,n2=head,n3=head->next;
while(n2)
{
n2->next=n1;
n1=n2;
n2=n3;
if(n3)
{
n3=n3->next;
}
}
return n1;
}