链表k个节点反向】的更多相关文章

问题: 以k个元素为一组,反转单向链表.比如: 输入: 1->2->3->4->5->6->7->8->null and k = 3 输出:3->2->1->6->5->4->8->7->null. 分析: 我们可以把整个链表分成多个长度为 k  的子链表, 然后,我们再反转每一个子链表(递归).问题的关键是我们需要把每个子链表再连接起来.所以,对每一个子链表操作以后,我们需要返回该子链表的头(head),然后…
类似于找链表的后k个节点 不同的是要把前边的接到后边 public ListNode rotateRight(ListNode head, int k) { //特殊情况 if (head==null||head.next==null||k==0) return head; int len = 0; ListNode p = head; //计算链表长度,防止k大于长度 while (p!=null) { len++; p = p.next; } //k大于等于len的情况 k = k>=len…
PS:这是一道出境率极高的题目,记得去年参加校园招聘时我看到了3次,但是每次写的都不完善. 一.题目:链表的倒数第k个节点 题目:输入一个链表,输出该链表中倒数第k个结点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点.例如一个链表有6个结点,从头结点开始它们的值依次是1.2.3.4.5.6.这个链表的倒数第3个结点是值为4的结点. 链表的节点定义如下,这里使用的是C#来定义: public class Node { public int Data { get; set…
题目描述:输入一个单向链表,输出该链表中倒数第k个节点,链表的倒数第0个节点为链表的尾指针. 最普遍的方法是,先统计单链表中结点的个数,然后再找到第(n-k)个结点.注意链表为空,k为0,k为1,k大于链表中节点个数时的情况 .时间复杂度为O(n).代码略. 这里主要讲一下另一个思路,这种思路在其他题目中也会有应用.主要思路就是使用两个指针,先让前面的指针走到正向第k个结点 ,这样前后两个指针的距离差是k-1,之后前后两个指针一起向前走,前面的指针走到最后一个结点时,后面指针所指结点就是倒数第k…
题意:给一个单链表,每k个节点就将这k个节点反置,若节点数不是k的倍数,则后面不够k个的这一小段链表不必反置. 思路:递归法.每次递归就将k个节点反置,将k个之后的链表头递归下去解决.利用原来的函数接口即可,不用重新定义. /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; *…
题目:输入一个链表,输出这个链表中倒数第K个节点.(代码的鲁棒性) 思路:用两个指针p1和p2,都指向头节点,开始的时候,p2不动,p1移动k-1次,指向第k个节点.此时,如果p1->next!=null,则同时移动P1和p2.直到p1指向最后一个节点.此时,P2指向倒数第k个节点. C++代码: #include<iostream> using namespace std; struct ListNode { int m_nValue; ListNode* m_pNext; }; Li…
题目:输入一个链表,输出该链表中倒数第K个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个结点. package com.edu; class LinkNode{ //定义一个结点类型 int val; LinkNode link=null; public LinkNode(int val) { this.val=val; } } public class FindKthToTail { public LinkNode Test(LinkNode lst ,int k)…
1. 问题描写叙述 给定一个单链表,删除当中值为k的全部节点.比如:1→2→6→3→4→5→61 \to 2 \to 6 \to 3 \to 4 \to 5 \to 6,删除当中值为6的节点,返回:1→2→3→4→51 \to 2 \to 3 \to 4 \to 5 . 2. 方法与思路 这是一个简单的链表操作题.删除是要考虑的节点所在的位置(头部,中间和尾部),分开处理一下好了.主要步骤例如以下描写叙述: I. while head−>val≠targetwhile head->val \n…
题目:输入1个链表,输出该链表倒数第k个节点,有头指针和尾指针.链表倒数第0个节点是链表的尾指针节点. 代码: /* 尾指针是倒数第0个,则倒数第k个是正数第len-k个,计算len */ #include<iostream> using namespace std; typedef struct node { int key; struct node* next; }List; List* head=NULL; List* tail=NULL; void create_list(void)…
问题描述: 找出链表中倒数第K个节点 思路分析: 用两个指针,一前一后,保持k个距离,前面的指针移动到末尾,后面的指针就刚好直到第k个节点, 要考虑到k为0,倒数第k个节点不存在的情况. 参考代码: ListNode* FindKthToTail(ListNode * pHead,unsigned int k){    if (NULL == pHead || k == 0)    {        return NULL;    } ListNode *pAhead = pHead; for…