H3C笔试题:C语言旋转双向链表
来源:互联网 发布:linq.js where 编辑:程序博客网 时间:2024/04/30 07:03
准备H3C面试刷的一道题 4MIN写完草稿 BUG FREE 分享一下:
#include<stdio.h>
typedef struct node
{
int data;
struct node* prev;
struct node* next;
}ListNode;
ListNode* new_node(int val)
{
ListNode* node = (ListNode*) malloc(sizeof(ListNode));
node->data = val;
node->prev = NULL;
node->next = NULL;
return node;
}
void print(ListNode* head)
{
if (head == NULL)
{
return;
}
while (head != NULL)
{
printf("%d\n", head->data);
head = head->next;
}
}
void print_reverse(ListNode* tail)
{
if (tail == NULL)
{
return;
}
while (tail != NULL)
{
printf("%d\n", tail->data);
tail = tail->prev;
}
}
ListNode* rotate_list(ListNode* head, int val)
{
if (head == NULL)
{
return;
}
ListNode* old_head = head; ListNode* prev = NULL; ListNode* tail = head;
while (tail->next != NULL)
{
tail = tail->next;
}
while (head != NULL&&head->data!=val)
{
head = head->next;
}
if (head == NULL)
{
return old_head;
}
if (head->next == NULL)
{
prev = head->prev;
prev->next = NULL;
head->next = old_head;
old_head->prev = head;
head->prev = NULL;
return head;
}
else
{
prev = head->prev;
prev->next = NULL;
tail->next = old_head;
old_head->prev = tail;
head->prev = NULL;
return head;
}
}
void delete_node(ListNode* head,int val)
{
if (head == NULL)
{
return;
}
while (head != NULL&&head->data!=val)
{
head = head->next;
}
if (head != NULL)
{
if (head->next == NULL)
{
head->prev->next = head->next;
free(head);
head = NULL;
}
else
{
ListNode* next = head->next;
ListNode* prev = head->prev;
prev->next = next;
next->prev = prev;
free(head);
head = NULL;
}
}
}
int main()
{
ListNode* l1=new_node(3);
ListNode* l2=new_node(1);
ListNode* l3=new_node(10);
ListNode* l4=new_node(7);
ListNode* l5=new_node(6);
ListNode* l6=new_node(5);
l1->next = l2;
l2->prev = l1;
l2->next = l3;
l3->prev = l2;
l3->next = l4;
l4->prev = l3;
l4->next = l5;
l5->prev = l4;
l5->next = l6;
l6->prev = l5;
ListNode* new_list = rotate_list(l1, 100);
print(new_list);
return 0;
}
- H3C笔试题:C语言旋转双向链表
- 双向链表C语言
- C语言双向链表
- h3c笔试题
- C语言实现双向链表删除、插入、双向输出
- C语言双向链表 快速排序
- c语言双向链表举例
- 双向链表代码实现-C语言
- 双向链表C语言实现
- C语言实现双向链表[上]
- C语言数据结构之双向链表
- C语言实现双向链表
- c语言双向链表的实现
- C语言数据结构----双向链表
- C语言实现双向循环链表
- C语言中的双向循环链表
- C语言实现双向链表
- 双向链表的C语言实现
- QNX加密方法-qnx防破解-增加安全功能
- 算法 排列、组合 相关
- 信号和槽
- ZOJ 3747 Attack on Titans【带限制条件的递推dp+计数技巧】
- 【笔记】NEXUS 3.* 下载及安装, 与2.*稍有不同
- H3C笔试题:C语言旋转双向链表
- testng.xml文件结构
- yii 里sphinx使用
- Qt的元对象系统
- #ifdef #endif
- GoF 的23个经典设计模式
- 计算机磁盘是如何实现存储的?
- [题解]uoj228 基础数据结构练习题
- [科普向] 一些问题的解决办法 即算法思路。