LeetCode | 206. 反转链表
- 这里有两个思路
我们先来看第一个思路:
- 创建一个新的链表,然后将原链表头插
- 头插需要保存下一个的地址,再头插
代码如下:
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; }