hello ~~~每日一练的分享来了。
今天up主将为大家分享一个 OJ题之反转链表
题目:将链表实现如下的变化
1.思路的讲解:对于原链表我们只需改变指针的指向(箭头)即可
那么问题就来了,我们如何实现此操作?
1)首先我们创建3个指针变量
2)其次我们让n1 指向NULL,n2指向第一个结点,n3指向第二个结点
4) 之后让 n1指向第一个结点,n2指向第二个结点,n3指向第三给结点,其实就是这三个结点依次后移,直至n1走到我们的原链表的最后一个结点
3)循环赋值即可
最后一次循环对应的草图:
n1就成为了头节点
对应代码如下:
ListNode n1,n2,n3;//创建3个结构体类型指针的结点
n1 = NULL,n2 = head,n3 = head->next;
OJ 答题方式:完整代码如下
typedef struct ListNode* ListNode;
struct ListNode* reverseList(struct ListNode* head){
if(head == NULL)//头节点可能为空
{
return NULL;
}
ListNode n1,n2,n3;//创建3个结构体类型指针的结点
n1 = NULL,n2 = head,n3 = head->next;
while(n2)
{
n2->next = n1;
n1 = n2;
n2 = n3;
if(n3)
n3 = n2->next;
}
return n1;
}