华为面试题——单向链表倒转(一次遍历)
2014-08-11 21:21
393 查看
/*
Blog:
http://blog.csdn.net/jiangxinnju
function:
将单向链表reverse,如ABCD变成DCBA,只能搜索链表一次
*/
#include <iostream>
using namespace std;
struct node
{
char data;
struct node *next;
};
typedef struct node NODE;
void test_exercise006()
{
NODE *head = new NODE; //建立附加头结点
head->next = NULL;
/*创建链表*/
NODE *current,*previous;
previous = head;
char input;
cout << "Input your list table NODE data,end with '#':";
cin >> input;
while(input != '#')
{
current = new NODE;
current->data = input;
current->next = NULL;
previous->next = current;
previous = previous->next;
cout << "Input your list table NODE data,end with '#':";
cin >> input;
}
/*输出链表*/
current = head->next;
while(current != NULL)
{
cout << current->data << " ";
current = current->next;
}
cout << endl;
/*倒转链表*/
current = head->next;
NODE *p = current->next;
NODE *q = p->next;
while(q != NULL)
{
p->next = current;
current = p;
p = q;
q = q->next;
}
p->next = current;
current = p;
head->next->next = NULL;
head->next = current;
/*输出链表*/
current = head->next;
while(current != NULL)
{
cout << current->data << " ";
current = current->next;
}
}
Blog:
http://blog.csdn.net/jiangxinnju
function:
将单向链表reverse,如ABCD变成DCBA,只能搜索链表一次
*/
#include <iostream>
using namespace std;
struct node
{
char data;
struct node *next;
};
typedef struct node NODE;
void test_exercise006()
{
NODE *head = new NODE; //建立附加头结点
head->next = NULL;
/*创建链表*/
NODE *current,*previous;
previous = head;
char input;
cout << "Input your list table NODE data,end with '#':";
cin >> input;
while(input != '#')
{
current = new NODE;
current->data = input;
current->next = NULL;
previous->next = current;
previous = previous->next;
cout << "Input your list table NODE data,end with '#':";
cin >> input;
}
/*输出链表*/
current = head->next;
while(current != NULL)
{
cout << current->data << " ";
current = current->next;
}
cout << endl;
/*倒转链表*/
current = head->next;
NODE *p = current->next;
NODE *q = p->next;
while(q != NULL)
{
p->next = current;
current = p;
p = q;
q = q->next;
}
p->next = current;
current = p;
head->next->next = NULL;
head->next = current;
/*输出链表*/
current = head->next;
while(current != NULL)
{
cout << current->data << " ";
current = current->next;
}
}
相关文章推荐
- 华为面试题——单向链表倒转(一次遍历)
- 程序员面试题精选(35):一次遍历链表求中间节点位置
- 算法与数据结构面试题(11)-一次遍历得到链表的中间节点
- 一次遍历单向链表找到中间节点
- 给定一个单向链表(长度未知),请遍历一次就找到中间的指针,假设该链表存储在只读存储器,不能被修改
- 对通过用户输入的值,并遍历一次,将用户输入的值倒过来,单向链表进行逆向
- 华为机试题(8)--单向链表的建立,反转(逆序),遍历显示,删除
- 面试题28:单链表一次遍历删除从后往前的第n个节点
- 【算法题】一次遍历单向链表找到中间节点
- C实现简单单向链表,一次遍历查找倒数第k个节点的值
- 链表3 ----- 一次遍历找到中间节点
- 华为OJ——输出单向链表中倒数第k个结点
- 单链表 --- 查找链表中间节点,仅一次遍历
- C++实现遍历链表一次求出中间的节点
- C语言:【单链表】查找单链表的中间节点,要求只能遍历一次
- 单向循环链表创建、遍历、插入、删除、查找(按位置,按元素值)、清空、销毁
- 查找单链表的倒数第k个节点,要求只能遍历一次链表(C语言)
- 华为OJ基础篇-输出单向链表中倒数第k个结点
- 单向链表的插入、查找和遍历方法 (c)
- 数据结构:遍历一次获得链表的倒数第N个节点