Reverse Nodes in k-Group
2015-06-17 15:51
609 查看
题目:
Given a linked list, reverse the nodes of a linked list k at a time and return its modified list.
If the number of nodes is not a multiple of k then left-out nodes in the end should remain as it is.
You may not alter the values in the nodes, only nodes itself may be changed.
Only constant memory is allowed.
For example,
Given this linked list:
For k = 2, you should return:
For k = 3, you should return:
解题思路:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# @param {ListNode} head
# @param {integer} k
# @return {ListNode}
def reverseKGroup(self, head, k):
def reverseList(head,tail):
sentry = ListNode(-1)
sentry.next = tail.next
sentry_tail = tail.next
while head!=sentry_tail:
tmp = head
head = head.next
tmp.next = sentry.next
sentry.next = tmp
return sentry.next
sentry = ListNode(-1)
sentry.next, length = head, 0
tmp = sentry
while tmp.next:
tmp = tmp.next
length += 1
if length == k:
tail=tmp
head_new = tmp.next
if length<k:
return sentry.next
elif length==k:
return reverseList(head,tail)
else:
sentry.next = reverseList(head,tail)
head.next = self.reverseKGroup(head_new, k)
return sentry.next
Given a linked list, reverse the nodes of a linked list k at a time and return its modified list.
If the number of nodes is not a multiple of k then left-out nodes in the end should remain as it is.
You may not alter the values in the nodes, only nodes itself may be changed.
Only constant memory is allowed.
For example,
Given this linked list:
1->2->3->4->5
For k = 2, you should return:
2->1->4->3->5
For k = 3, you should return:
3->2->1->4->5
解题思路:
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
# @param {ListNode} head
# @param {integer} k
# @return {ListNode}
def reverseKGroup(self, head, k):
def reverseList(head,tail):
sentry = ListNode(-1)
sentry.next = tail.next
sentry_tail = tail.next
while head!=sentry_tail:
tmp = head
head = head.next
tmp.next = sentry.next
sentry.next = tmp
return sentry.next
sentry = ListNode(-1)
sentry.next, length = head, 0
tmp = sentry
while tmp.next:
tmp = tmp.next
length += 1
if length == k:
tail=tmp
head_new = tmp.next
if length<k:
return sentry.next
elif length==k:
return reverseList(head,tail)
else:
sentry.next = reverseList(head,tail)
head.next = self.reverseKGroup(head_new, k)
return sentry.next
相关文章推荐
- Node.Js - 路由Router
- nodejs express via ssl 发送接受json post请求
- nodeJS 利用xlsx导出插件导出excel文件 (可以设置excel单元格颜色/宽度)
- DaoCloud体验-使用node构建应用程序
- nodejs+socket聊天系统
- 如何使用NPM来管理你的Node.js依赖
- 创建并发布node.js module
- socket参数详解:TcpNoDelay
- CvValArray和CvCARTNode
- 在Ubuntu系统上安装Ghost博客平台的教程
- 为什么我要用 Node.js? 案例逐一介绍
- NodeJS框架express的途径映射(路由)功能及控制
- [LeetCode][JavaScript]Populating Next Right Pointers in Each Node
- Nodejs正则表达式函数之match、test、exec、search、split、replace使用详解
- nodejs socket.io初探
- leetcode Count Complete Tree Nodes
- Count Complete Tree Nodes
- leetcode--CountCompleteTreeNodes
- 使用async解决nodejs异步问题
- Swap Nodes in Pairs