[LeetCode]206. Reverse Linked List(反转单链表)
来源:互联网 发布:linux和windows双系统 编辑:程序博客网 时间:2024/05/14 00:55
206. Reverse Linked List
Reverse a singly linked list.
反向单链表。
Hint:
A linked list can be reversed either iteratively or recursively. Could you implement both?
提示:
可以迭代或递归地颠倒链表
思路1:
- 现将链表变成环,每次都将原第一个结点之后的那个结点放在新的表头后面,最后断开环。
- 比如1,2,3,4,5 变成1,2,3,4,5->1(环)
- 第一次:把第一个结点1后边的结点2放到新表头后面,变成2,1,3,4,5 ->2(环)
- 第二次:把第一个结点1后边的结点3放到新表头后面,变成3,2,1,4,5 ->3(环)
- 4,3,2,1,5 ->4(环)
5,4,3,2,1 ->5(环)
代码如下:
ListNode* reverseList(ListNode* head) { if(head == nullptr || head->next == nullptr) return head; ListNode* res; ListNode* first; ListNode* temp; res = new ListNode(-1); res->next = head; //将单链表变成环 first = head;//指向原链表的头结点 while(first->next != nullptr){ temp = first->next;//指向即将处理的点 first->next = temp->next; temp->next = res->next; res->next = temp; } head = res->next; res->next = nullptr; return head; }
思路2:
- 参考了网上别人写的方法,点击查看
代码如下:
ListNode* reverseList(ListNode* head) { if(head == nullptr || head->next == nullptr) return head; ListNode* p; ListNode* q; ListNode* r; p = head; q = head->next; head->next = nullptr;//旧的头指针是新的尾指针 指向NULL while(q){ r = q->next;//用来保存下一步要处理的指针 q->next = p;//p q 交替处理 进行反转单链表 p = q; q = r; } head = p;//最后的q必定指向NULL,p就成了新链表的头指针 return head; }
思路3:
- 递归,参考链接
- 现在需要把A->B->C->D进行反转,
- 可以先假设B->C->D已经反转好,已经成为了D->C->B,那么接下来要做的事情就是将D->C->B看成一个整体,让这个整体的next指向A,所以问题转化了反转B->C->D。那么,
- 可以先假设C->D已经反转好,已经成为了D->C,那么接下来要做的事情就是将D->C看成一个整体,让这个整体的next指向B,所以问题转化了反转C->D。那么,
- 可以先假设D(其实是D->NULL)已经反转好,已经成为了D(其实是head->D),那么接下来要做的事情就是将D(其实是head->D)看成一个整体,让这个整体的next指向C,所以问题转化了反转D。
代码如下:
ListNode* reverseList(ListNode* head) { if (!head || !(head -> next)) return head; ListNode* node = reverseList(head -> next); head -> next -> next = head; head -> next = NULL; return node; }
0 0
- [LeetCode]206. Reverse Linked List(反转单链表)
- leetcode 206. Reverse Linked List 反转字符串
- Leetcode Reverse Linked List 反转单链表
- Reverse Linked List 单链表反转
- [LeetCode]206. Reverse Linked List 链表反转
- LeetCode.206. Reverse Linked List(反转有序链表)
- LeetCode 206. Reverse Linked List 反转链表
- (Leetcode)92. Reverse Linked List II ——反转单链表
- leetcode 206 ---Reverse Linked List 链表 反转
- 206. Reverse Linked List&反转链表
- leetcode_206. Reverse Linked List 反转单链表
- 【LeetCode】206.reverse linked list
- [leetcode] 206.Reverse Linked List
- [leetcode] 206. Reverse Linked List
- 206. Reverse Linked List LeetCode
- leetCode 206. Reverse Linked List
- LeetCode 206. Reverse Linked List
- LeetCode 206. Reverse Linked List
- Utilizing multi-core processors in NS-2
- hdu 1009 FatMouse' Trade
- Startservice与Bindservice的使用
- Spark SQL下的Parquet使用最佳实践和代码实战
- Fiddler抓取移动端HTTP数据包
- [LeetCode]206. Reverse Linked List(反转单链表)
- JVM 内存模型概述
- 经典算法(二)之回文数
- PAT 乙级 1020. 月饼 (25)
- 机器学习----降维与度量学习(等度量映射和度量学习)
- ZJOI2017酱油记2
- 输入验证
- hautoj 1263: rqy的键盘
- JAVA知识点总结-11 Set,Map