leetcode.61
文章图片
旋转链表
这道题在leetcode上难度是中等还是比较意外的,做下来难度并不是很大。思路
找到链表的末结点以及末结点的前驱,根据k的长度调整链表
特殊情况--->解决方法
1.链表为空时--->判断
2.末结点不存在前驱时--->判断
3.k的数字过于大时--->取余
代码
/**
* Definition for singly-linked list.
* struct ListNode {
*int val;
*struct ListNode *next;
* };
*/
/*当k的长度是链表长度的整数倍时,链表恢复原状*/
int getlen(struct ListNode* head)
{
int c=0;
while(head!=NULL)
{
++c;
head=head->next;
}
return c;
}
struct ListNode* rotateRight(struct ListNode* head, int k) {
struct ListNode* p,*q,*r;
p=head;
int c=getlen(head);
if(p==NULL)return NULL;
if(p->next==NULL)return head;
k=k%c;
if(k==0)return head;
for(int i=0;
inext->next!=NULL)
{
p=p->next;
}
r=p->next;
q=p;
q->next=NULL;
r->next=head;
head=r;
}
return head;
}
【leetcode.61】有朋友有更好的思路以及方法,欢迎留言讨论。
推荐阅读
- 宽容谁
- 一个人的旅行,三亚
- 第6.2章(设置属性)
- 布丽吉特,人生绝对的赢家
- 家乡的那条小河
- 讲述,美丽聪明的海欧!
- PMSJ寻平面设计师之现代(Hyundai)
- 夜游宫|夜游宫 心语
- 增长黑客的海盗法则
- 画画吗()