如何实现C语言中旋转链表的数据结构?

2026-05-20 02:181阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计439个文字,预计阅读时间需要2分钟。

如何实现C语言中旋转链表的数据结构?

C语言实现链表旋转的示例及分析:示例:给定链表1-2-3-4-5-null和k=2,返回4-5-1-2-3-null。分析:直观感觉,直接把分割点后面的节点接到前面即可。记得k可能大于len,要取模。

代码:cstruct ListNode { int val; struct ListNode *next;};

如何实现C语言中旋转链表的数据结构?

struct ListNode* rotateRight(struct ListNode* head, int k) { if (!head || !head->next || k==0) return head;

struct ListNode *fast=head, *slow=head; int len=1; // 链表长度

// 计算链表长度 while (fast->next) { fast=fast->next; len++; }

// 将链表尾连接到头,形成环 fast->next=head;

// 移动slow和fast指针,使fast指向新链表的尾部,slow指向新链表的头 for (int i=0; i next; fast=fast->next; }

// 断开环,并返回新链表的头 head=slow->next; slow->next=NULL;

return head;}

C语言数据结构旋转链表的实现

实例:

给出链表1->2->3->4->5->null和k=2

返回4->5->1->2->3->null

分析

感觉很直观,直接把分割点找出来就行,记得k可能大于len,要取模

代码:

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: /** * @param head: the list * @param k: rotate to the right k places * @return: the list after rotation */ ListNode *rotateRight(ListNode *head, int k) { // write your code here if(head==NULL) return head; int len = 0; ListNode*temp = head; while(temp) { len++; temp = temp->next; } k%=len; if(k==0) return head; k = len-k; temp = head; while(k>1) { temp = temp->next; k--; } ListNode*newStart = temp->next; temp->next = NULL; temp = newStart; while(temp->next) temp = temp->next; temp->next = head; return newStart; } };

以上就是C语言数据结构旋转链表的实现,如有疑问请留言或者到本站社区交流讨论,本站关于数据结构的文章还有很多,希望大家搜索查阅,大家共同进步!

标签:实现语言

本文共计439个文字,预计阅读时间需要2分钟。

如何实现C语言中旋转链表的数据结构?

C语言实现链表旋转的示例及分析:示例:给定链表1-2-3-4-5-null和k=2,返回4-5-1-2-3-null。分析:直观感觉,直接把分割点后面的节点接到前面即可。记得k可能大于len,要取模。

代码:cstruct ListNode { int val; struct ListNode *next;};

如何实现C语言中旋转链表的数据结构?

struct ListNode* rotateRight(struct ListNode* head, int k) { if (!head || !head->next || k==0) return head;

struct ListNode *fast=head, *slow=head; int len=1; // 链表长度

// 计算链表长度 while (fast->next) { fast=fast->next; len++; }

// 将链表尾连接到头,形成环 fast->next=head;

// 移动slow和fast指针,使fast指向新链表的尾部,slow指向新链表的头 for (int i=0; i next; fast=fast->next; }

// 断开环,并返回新链表的头 head=slow->next; slow->next=NULL;

return head;}

C语言数据结构旋转链表的实现

实例:

给出链表1->2->3->4->5->null和k=2

返回4->5->1->2->3->null

分析

感觉很直观,直接把分割点找出来就行,记得k可能大于len,要取模

代码:

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: /** * @param head: the list * @param k: rotate to the right k places * @return: the list after rotation */ ListNode *rotateRight(ListNode *head, int k) { // write your code here if(head==NULL) return head; int len = 0; ListNode*temp = head; while(temp) { len++; temp = temp->next; } k%=len; if(k==0) return head; k = len-k; temp = head; while(k>1) { temp = temp->next; k--; } ListNode*newStart = temp->next; temp->next = NULL; temp = newStart; while(temp->next) temp = temp->next; temp->next = head; return newStart; } };

以上就是C语言数据结构旋转链表的实现,如有疑问请留言或者到本站社区交流讨论,本站关于数据结构的文章还有很多,希望大家搜索查阅,大家共同进步!

标签:实现语言