1.题目:单链表的逆转(循环和递归)
思路:
循环:用两个指针p1,p2,p1指向node,p2指向node->next;在将p2->next指向p1前,先将p2->next保存下来。然后将p1,p2依次往后挪动
递归:将链表拆分为表头节点和余下链表,将余下链表逆序后,再表头节点链接到逆序后的余下链表中
注:对于线性数据结构,比较适合用迭代循环方法,而对于树状数据结构,比如二叉树,递归方法则非常简洁优雅。
代码:
循环
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
if(head==NULL)
return head;
ListNode* p1=head;
ListNode* p2=head->next;
while(p2!=NULL)
{
ListNode* temp=p2->next;
p2->next=p1;
p1=p2;
p2=temp;