准备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面试的双链表操作代码,包括创建节点、打印链表、反转打印链表、旋转链表及删除节点等功能。通过具体实例展示了链表的构建与操作流程。
3381

被折叠的 条评论
为什么被折叠?



