已知链表的头结点head,写一个函数把这个链表逆序
来源:互联网 发布:热力图软件 编辑:程序博客网 时间:2024/05/18 00:50
Node * ReverseList(Node *head) //链表逆序{if ( head == NULL || head->next == NULL )return head;Node *p1 = head ;Node *p2 = p1->next ;Node *p3 = p2->next ;p1->next = NULL ;while ( p3 != NULL ){p2->next = p1 ;p1 = p2 ;p2 = p3 ;p3 = p3->next ;}p2->next = p1 ;head = p2 ;return head ;}
上述代买有问题,不能实现整个的逆序;
思路应该为:
若链表为空或只有一个元素,则直接返回;
2). 设置两个前后相邻的指针p,q. 将p所指向的节点作为q指向节点的后继;
3). 重复2),直到q为空
4). 调整链表头和链表尾
#include <stdio.h> #include <stdlib.h> typedef struct tagListNode{ int data; struct tagListNode* next; }ListNode, *List; void PrintList(List head); List ReverseList(List head); int main() { //分配链表头结点 ListNode *head; head = (ListNode*)malloc(sizeof(ListNode)); head->next = NULL; head->data = -1; //将[1,10]加入链表 int i; ListNode *p, *q; p = head; for(int i = 1; i <= 10; i++) { q = (ListNode *)malloc(sizeof(ListNode)); q->data = i; q->next = NULL; p->next = q; p = q; } PrintList(head); /*输出原始链表*/ head = ReverseList(head); /*逆序链表*/ PrintList(head); /*输出逆序后的链表*/ return 0; } List ReverseList(List head) { if(head->next == NULL || head->next->next == NULL) { return head; /*链表为空或只有一个元素则直接返回*/ } ListNode *t = NULL, *p = head->next, *q = head->next->next; while(q != NULL) { t = q->next; q->next = p; p = q; q = t; } /*此时q指向原始链表最后一个元素,也是逆转后的链表的表头元素*/ head->next->next = NULL; /*设置链表尾*/ head->next = p; /*调整链表头*/ return head; } void PrintList(List head) { ListNode* p = head->next; while(p != NULL) { printf("%d ", p->data); p = p->next; } printf("/n"); }
- 已知链表的头结点head,写一个函数把这个链表逆序
- 已知链表的头结点head,写一个函数把这个链表逆序
- 已知单向链表的头结点head,写一个函数把这个链表逆序 ( Intel)
- 已知单向链表的头结点head,写一个函数把这个链表逆序 ( Intel)
- C/C++ | 26-17 已知一个单向链表的头,删除其某一个结点的算法
- 设计鲁棒性的方法:输入一个链表的头结点,逆序遍历打印该链表出来
- 有一个单项的链表,在没有头结点的情况下,只知道有一个指向结点B的指针p,假设这个结点B不是尾结点,删除该节点B。
- 定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。
- 链表的 头指针 头结点
- 逆序带头结点的单向链表
- 头结点链表
- 输入一个链表的头结点,从尾到头反过来输出每个结点的值
- 输入一个链表的头结点,从尾到头反过来输出每个结点的值
- 输入一个链表的头结点,从尾到头反过来输出每个结点的值
- 输入一个链表的头结点,从尾到头反过来输出每个结点的值
- 输入一个链表的头结点,从尾到头反过来输出每个结点的值
- 输入一个链表的头结点,从尾到头反过来输出每个结点的值。
- 输入一个链表的头结点,从尾到头反过来输出每个结点的值
- 3D视频可能出现的质量问题 (MSU出品)
- C#委托
- win7下访问Application Data文件夹
- Gearman 介绍
- java web 开发入门心得
- 已知链表的头结点head,写一个函数把这个链表逆序
- C语言中常用控制符
- UBUNTU下软件的安装,卸载和查询
- Linux内存管理
- Java 转义字符
- ThreadLocal源代码分析
- AOP 的利器:ASM 3.0 介绍
- (1.1.9)UVA 10930 A-Sequence(模拟)
- Win7的80端口默认是被System进程占用