LeetCode | 206. 反转链表
OJ链接
- 这里有两个思路
我们先来看第一个思路:
- 创建一个新的链表,然后将原链表头插
- 头插需要保存下一个的地址,再头插
代码如下:
struct ListNode* reverseList(struct ListNode* head) {
struct ListNode* cur = head;
struct ListNode* newHead = NULL;
while(cur)
{
struct ListNode*next = cur->next;
//头插
cur->next = newHead;
newHead = cur;
cur = next;
}
return newHead;
}
思路二:
- 这个思路二,就是定义三个指针,n1,n2,n3
- 让n1掷为空,n2指向头结点,n3指向n2->next,也就是第二个节点
- 然后我们就开始走,n1给了n2,n2给了n3,n3继续往前走
- 当n2走到空才停下
- 最后返回n1,就相当于逆转的链表
代码如下:
struct ListNode* reverseList(struct ListNode* head) {
if(head == NULL)
return NULL;
struct ListNode* n1 = NULL;
struct ListNode* n2 = head;
struct ListNode* n3 = n2->next;
while(n2 != NULL)
{
n2->next = n1;
n1 = n2;
n2 = n3;
if(n3)
n3 = n3->next;
}
return n1;
}