链表操作----将单链表向右旋转 K 个位置
给定一个单链表,设计一个算法实现链表向右旋转 K 个位置。
举例: 给定 1->2->3->4->5->6->NULL, K=3
则 4->5->6->1->2->3->NULL
分析:
1. 这道题目的关键在于找到 尾节点和旋转后新链表的尾节点。 假设是 tail, new->tail.
然后只要进行 tail->next = head;
head = new_tail->next;
new_tail->next = NULL;
2. 找两个尾节点可以采用 双指针的方法。
注意到 这两个节点 间距是 K,(初始化,tail = new_tail = head;)
STEP 1:tail 从 head 出发,先走 k 步
STEP 2: new_tail 和 tail 同时往前走, 当 tail 指向尾节点时, new_tail 的位置即所求。
struct ListNode{
  int val;
  ListNode *next;
  ListNode(int x)
    :val(x), next(NULL){}
};
int Length(ListNode *head)
{
  int len(0);
  for(; head; head = head->next, ++ len);
  return len;
}
ListNode* ReverseKList(ListNode *head, int k)
{
  int length = Length(head);
  if(length < 2 || k == 0 || k == length)
    return head;
  if(k < 0) return ReverseKList(head, k + length);
  if(k > length) return ReverseKList(head, k % length);
  assert(k > 0 && k < length);
  ListNode *tail(head), *new_tail(head);
  // tail 先走K步
  for(int i=0; i<k; ++i)
    tail = tail->next;
  // 一起走,知道 tail 指向尾节点
  while(tail->next){
    tail = tail->next;
    new_tail = new_tail->next;
  }
  // new_tail 指向旋转后的尾节点
  tail->next = head;
  head = new_tail->next;
  new_tail->next = NULL;
  return head;
}
												
											链表操作----将单链表向右旋转 K 个位置的更多相关文章
- JAVA 链表操作:单链表和双链表
		
主要讲述几点: 一.链表的简介 二.链表实现原理和必要性 三.单链表示例 四.双链表示例 一.链表的简介 链表是一种比较常用的数据结构,链表虽然保存比较复杂,但是在查询时候比较便捷,在多种计算机语言都 ...
 - Python与数据结构[0] -> 链表/LinkedList[0] -> 单链表与带表头单链表的 Python 实现
		
单链表 / Linked List 目录 单链表 带表头单链表 链表是一种基本的线性数据结构,在C语言中,这种数据结构通过指针实现,由于存储空间不要求连续性,因此插入和删除操作将变得十分快速.下面将利 ...
 - SDUT-2120_数据结构实验之链表五:单链表的拆分
		
数据结构实验之链表五:单链表的拆分 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 输入N个整数顺序建立一个单链表,将该 ...
 - SDUT-2122_数据结构实验之链表七:单链表中重复元素的删除
		
数据结构实验之链表七:单链表中重复元素的删除 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 按照数据输入的相反顺序(逆 ...
 - SDUT OJ 数据结构实验之链表七:单链表中重复元素的删除
		
数据结构实验之链表七:单链表中重复元素的删除 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem ...
 - SDUT OJ 数据结构实验之链表五:单链表的拆分
		
数据结构实验之链表五:单链表的拆分 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem Descr ...
 - 《程序员代码面试指南》第二章 链表问题 将单链表每K个节点之间逆序
		
样例 链表1-2-3-4-5-6-7-8-9-10 K=3 ,结果 3-2-1-6-5-4-9-8-7-10 java代码 /** * @Description:将单链表每K个节点之间逆序 * @Au ...
 - 《程序员代码面试指南》第二章 链表问题 在单链表和双链表中删除倒数第K个节点
		
题目 在单链表和双链表中删除倒数第K个节点 java代码 /** * @Description:在单链表和双链表中删除倒数第K个节点 * @Author: lizhouwei * @CreateDat ...
 - [程序员代码面试指南]链表问题-将单链表的每k个节点之间逆序
		
题目描述 给定一个单链表的表头节点head,实现一个调整单链表的函数,是的每k个节点之间逆序,如果最后不够k个节点一组,则不调整最后几个节点. 题解 内部函数reverse实现链表beg到end的翻转 ...
 
随机推荐
- Android 禁止Viewpager左右滑动功能
			
首先自定义一个 继承自 ViewPager的自定义 类 package com.yourcompany; import android.content.Context; import android. ...
 - hdu 3853LOOPS (概率DP)
			
LOOPS Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 125536/65536 K (Java/Others) Total Su ...
 - web标准常见问题整理
			
1.超链接访问过后hover样式就不出现的问题 2.FF下如何使连续长字段自动换行 3.ff下为什么父容器的高度不能自适应 4. IE6的双倍边距BUG 5. IE6下绝对定位的容器内文本无法正常选择 ...
 - jQuery 2.0.3 源码分析 Deferrred概念
			
转载http://www.cnblogs.com/aaronjs/p/3348569.html JavaScript编程几乎总是伴随着异步操作,传统的异步操作会在操作完成之后,使用回调函数传回结果,而 ...
 - Objective-C:Foundation框架-常用类-NSDictionary
			
与NSString.NSArray一样,NSDictionary是不可变的,其对应可变类型为NSMutableDictionary.其用法如下: #import <Foundation/Foun ...
 - Extjs jar包问题
			
当前使用struts2.23版本,使用用了jsonplugin-0.3x.jar报: com.opensymphony.xwork2.util.TextUtils错. json-lib-2.x.jar ...
 - Oracle存储过程写法
			
create or replace procedure QIANFEIGL_JIAOKUANDY( cebenh varchar2, kehuh varchar2, hetongh varchar2, ...
 - Go语言并发与并行学习笔记(三)
			
转:http://blog.csdn.net/kjfcpua/article/details/18265475 Go语言并发的设计模式和应用场景 以下设计模式和应用场景来自Google IO上的关于G ...
 - office 使用技巧
			
Excel: 非打印区域显示成灰色:视图--分页预览 选定行的时侯,如何从某一行选定到末尾? 先点某一行,然后按住shift不松,再按END,再按下方向箭. 选定列也是这样,先按住某列,然后按SHIF ...
 - HBase High Level Architecutre