反转单链表
2015-07-20 14:40
211 查看
反转单链表
1. 用数组将单链表的值存储在数组里。方法简单,但浪费空间。
2. 遍历链表,从第二个节点开始,将每个节点的next指向前一个节点。原链表的最后一个节点变为头节点。
3. 遍历链表,除第一个节点外,将每一个节点依次插到第一个节点后面。最后将第一个节点插到最后。
way 2 :
way 3 :
还可以在头结点前 加一个空节点
1. 用数组将单链表的值存储在数组里。方法简单,但浪费空间。
2. 遍历链表,从第二个节点开始,将每个节点的next指向前一个节点。原链表的最后一个节点变为头节点。
3. 遍历链表,除第一个节点外,将每一个节点依次插到第一个节点后面。最后将第一个节点插到最后。
way 2 :
ListNode* reverse_1(ListNode* head){ ListNode *p,*q,*t; if(head->next == NULL||head == NULL) return head; // 链表为空 或只有一个节点 则不用反转 p = head; q = head->next; head ->next = NULL; // 第一个节点 作为 最后一个节点 故其next指向空 while (q) { t = q->next; q->next =p; p = q; q = t; } head = p; // 最后一个节点p 作为头结点 return head; // 返回头结点 }
way 3 :
ListNode* reverse_2(ListNode* head) // way 2 : 除头结点外 将每个节点插到头节点后面 最后将头结点插到最后 { // 如 1 2 3 4 5 变成 1 5 4 3 2 最后变为 5 4 3 2 1 ListNode *p,*q; if (head->next==NULL||head==NULL) return head; p=head->next; while (p->next) { q = p->next; p->next=q->next; q->next=head->next; head->next=q; } p->next = head; // 最后一个节点的next 指向头结点head 从而形成了一个环 q = head->next; head->next = NULL; // 最后一个节点指向空 return q; }
还可以在头结点前 加一个空节点
ListNode* reverse_2_2(ListNode* head) // way 2 : 除头结点外 将每个节点插到头节点后面 最后将头结点插到最后 { // 如 1 2 3 4 5 变成 1 5 4 3 2 最后变为 5 4 3 2 1 ListNode *p; if (head->next==NULL||head==NULL) return head; ListNode* q = new ListNode(0); // 在head前加一个空节点 q->next = head; head = q; p=head->next; while (p->next) { q = p->next; p->next=q->next; q->next=head->next; head->next=q; } return head->next; }
相关文章推荐
- 渗透测试目标操作系统
- programming-challenges Primary Arithmetic (110501) 题解
- iOS多线程开发(四)---线程同步
- 解决安装AppServ问题(转)
- 有关MAC、PHY和MII
- JDBC读取BLOB类型
- 说好一个创业故事的5个步骤
- android studio导入eclipse或者 android studio工程文件的超简技巧
- 优化之误!
- 关于FastStone Capture输入中文出现乱码.
- 检测密码强度
- C/C++的一些备忘
- HDU2044 一只小蜜蜂...
- leetcode[107]:Binary Tree Level Order Traversal II
- 分享2个android开源库 DanmakuFlameMaster以及Volley
- 布尔表达式和选择结构
- 用jquery判断输入框还可以输入多少字
- iOS中url的特殊字符转换
- “英语”哪有男没用?
- Mac下配置JAVA_HOME