[LeetCode][Java] Reverse Nodes in k-Group

原创 2015年07月10日 18:29:12

题目:

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

题意:

给定一个链表,对于链表中的节点每k个进行转置一次,返回改动后的链表。

如果链表中的节点的数目不是k的整数倍,那么保持结尾剩余的那些节点不懂。

只允许常数空间。

比如:

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


算法分析:

利用的题目《Reverse Linked List II》的算法,k个元素为一组,进行倒置 

AC代码:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
 //利用的题目《Reverse Linked List II》的算法,k个元素为一组,进行倒置 
public class Solution 
{
    public ListNode reverseKGroup(ListNode head, int k) 
    {
		if(head==null||k<=1) return head;
    	int startindex=1;
		int endindex=k;
		int ki=0;
		int Allk=0;
		int kk=0;
		ListNode testhead=head;
		while(testhead!=null)
		{
			kk++;
			testhead=testhead.next;
		}
		Allk=kk/k;
		while(ki<Allk)
		{
			head=reverseBetween( head, startindex, endindex); 
			ki++;
			startindex+=k;
			endindex+=k;
		}
    	return head;
    }
    public static ListNode reverseBetween(ListNode head, int m, int n) 
    {
        if(head == null)
            return null;
        ListNode dummy = new ListNode(0);
        dummy.next = head;
        ListNode preNode = dummy;
        int i=1;
        while(preNode.next!=null && i<m)
        {
            preNode = preNode.next;
            i++;
        }
        //if(i<m)
          //  return head;
        ListNode mNode = preNode.next;
        ListNode cur = mNode.next;
        while(cur!=null && i<n)
        {
            ListNode next = cur.next;
            cur.next = preNode.next;
            preNode.next = cur;
            mNode.next = next;
            cur = next;
            i++;
        }
        return dummy.next;
    }
}


版权声明:本文为博主原创文章,转载注明出处

LeetCode 25 Reverse Nodes in k-Group (C,C++,Java,Python)

Problem: Given a linked list, reverse the nodes of a linked list k at a time and return its mod...

[Leetcode] Reverse Nodes in k-Group (Java)

Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. I...

LeetCode: Reverse Nodes in k-Group [024]

【题目】 Given a linked list, reverse the nodes of a linked list k at a time and return its modified li...

LeetCode #25 Reverse Nodes in k-Group

LeetCode #25 Reverse Nodes in k-Group题目描述 给出一个单向链表,再给出一个常数k。 任务如下: 步骤一:讲单向链表前k个元素的顺序倒转 步骤二:剩下的元素...

[Leetcode]_25 Reverse Nodes in k-Group

Leetcode_25 Reverse Nodes in k-Group

leetcode——Reverse Nodes in k-Group

题目: Given a linked list, reverse the nodes of a linked list k at a time and return its modified...

LeetCode | Reverse Nodes in k-Group

链表的反转 写的是生无可恋啊… 我的思路….其实和正确答案都差不多,但是一直ce调不出来… Given a linked list, reverse the nodes of a linked...

Leetcode之Reverse Nodes in k-Group (Hard)

Leetcode之Reverse Nodes in k-Group解法分析

LeetCode--Reverse Nodes in k-Group

题意:Given a linked list, reverse the nodes of a linked list k at a time and return its modified list....

Leetcode || Reverse Nodes in k-Group

Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. F...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[LeetCode][Java] Reverse Nodes in k-Group
举报原因:
原因补充:

(最多只允许输入30个字)