import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; class ListNode { public int val; public ListNode next; public ListNode(int val) { this.val = val; this.next = null; } } public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String[] params = br.readLine().split(" "); int n = Integer.parseInt(params[0]), k = Integer.parseInt(params[1]); String[] strElem = br.readLine().split(" "); ListNode head = new ListNode(Integer.parseInt(strElem[0])); ListNode cur = head; for(int i = 1; i < n; i++){ cur.next = new ListNode(Integer.parseInt(strElem[i])); cur = cur.next; } ListNode targetNode = tailKNode(head, k); ListNode dummy = new ListNode(0); dummy.next = head; ListNode prev = dummy; cur = head; while(cur != null) { if(cur == targetNode) prev.next = cur.next; prev = prev.next; cur = cur.next; } while(head != null){ System.out.print(head.val + " "); head = head.next; } } public static ListNode tailKNode(ListNode head, int k) { ListNode first = head, second = head; for(int i = 1; i < k; i++) first = first.next; while(first.next != null){ first = first.next; second = second.next; } return second; } }
# include <bits/stdc++.h> using namespace std; struct list_node{ int val; struct list_node * next; }; //链表的节点 int K; list_node * input_list(void) //读入链表 { int n, val; list_node * phead = new list_node(); list_node * cur_pnode = phead; scanf("%d %d", &n, &K); for (int i = 1; i <= n; ++i) { scanf("%d", &val); if (i == 1) { cur_pnode->val = val; cur_pnode->next = NULL; } else { list_node * new_pnode = new list_node(); new_pnode->val = val; new_pnode->next = NULL; cur_pnode->next = new_pnode; cur_pnode = new_pnode; } } return phead; } list_node * remove_last_kth_node(list_node * head, int K){ list_node *p = head; list_node *L = new list_node; L->next = head; for(int i=0;i<K-1;i++) p = p->next; if(p->next==NULL) return head->next; while(p->next->next){ p = p->next; head = head->next; } head->next = head->next->next; return L->next; } void print_list(list_node * head) { while (head != NULL) { printf("%d ", head->val); head = head->next; } } int main () { list_node * head = input_list(); // 链表的头节点 list_node * rhead = remove_last_kth_node(head, K); print_list(rhead); return 0; }
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static class Node { public int value; public Node next; public Node(int value) { this.value = value; } } public static Node removeLastKthNode(Node head, int lastKth) { if (head == null || lastKth < 1) { return head; } Node slow = head; Node fast = head; while (fast.next != null && lastKth > 0) { fast = fast.next; lastKth--; } if (lastKth == 1) { head = head.next; } else if (lastKth == 0) { while (fast.next != null) { fast = fast.next; slow = slow.next; } slow.next = slow.next.next; } return head; } public static Node listGenerator(int length, String[] numbers) { Node head = new Node(Integer.parseInt(numbers[0])); Node cur = head; for (int i = 1; i < length; i++) { cur.next = new Node(Integer.parseInt(numbers[i])); cur = cur.next; } cur.next = null; return head; } public static void printList(Node head) { while (head != null) { System.out.print(head.value +" "); head = head.next; } System.out.println(); } public static void main(String[] args) throws IOException { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); String[] parameters = bufferedReader.readLine().split(" "); int n = Integer.parseInt(parameters[0]); int k = Integer.parseInt(parameters[1]); String[] numbers = bufferedReader.readLine().split(" "); Node head = listGenerator(n, numbers); head = removeLastKthNode(head, k); printList(head); } }
import java.io.*; import java.util.*; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int k = scanner.nextInt(); Node node = new Node(scanner.nextInt()); Node head = node; for(int i=1;i<n;i++) { Node next = new Node(scanner.nextInt()); node.next = next; node = next; } StringBuilder sb = new StringBuilder(); Node result = removeK(head, k); while(result != null) { sb.append(result.value).append(" "); result = result.next; } System.out.println(sb.toString().trim()); } public static Node removeK(Node node, int k) { if(node == null || k<0) { return node; } Node help = new Node(-1); help.next = node; Node fast = node; Node slow = node; while(fast != null && k-- > 0) { fast = fast.next; } if(k > 0) { return help.next; } while(fast != null && fast.next != null) { fast = fast.next; slow = slow.next; } slow.next = slow.next.next; return help.next; } } class Node { public int value; public Node next; public Node(int data) { this.value = data; } }
# include <bits/stdc++.h> using namespace std; struct list_node{ int val; struct list_node * next; }; //链表的节点 int K; list_node * input_list(void) //读入链表 { int n, val; list_node * phead = new list_node(); list_node * cur_pnode = phead; scanf("%d %d", &n, &K); for (int i = 1; i <= n; ++i) { scanf("%d", &val); if (i == 1) { cur_pnode->val = val; cur_pnode->next = NULL; } else { list_node * new_pnode = new list_node(); new_pnode->val = val; new_pnode->next = NULL; cur_pnode->next = new_pnode; cur_pnode = new_pnode; } } return phead; } list_node * remove_last_kth_node(list_node * head, int K) { //////在下面完成代码 if(head==NULL) return NULL; list_node *phead=new list_node; phead->next=head; list_node* p1=head; list_node* p2=head; for(int i=0;i<K-1;i++) p1=p1->next; if(!p1) return NULL; if(!p1->next) return head->next; while(p1->next->next) { p1=p1->next; p2=p2->next; } p2->next=p2->next->next; return phead->next; } void print_list(list_node * head) { while (head != NULL) { printf("%d ", head->val); head = head->next; } } int main () { list_node * head = input_list(); // 链表的头节点 list_node * rhead = remove_last_kth_node(head, K); print_list(rhead); return 0; }
list_node * remove_last_kth_node(list_node * head, int K)
{
//////在下面完成代码
list_node * node = new list_node;
node->next = head;
//list_node * p = node;
list_node * p1 = head;
for(int i = 0;i < K-1;i++){
p1 = p1->next;
}
if(p1->next == nullptr)
return head->next;
list_node * p2 = head;
while(p1->next->next){
p1 = p1->next;
p2 = p2->next;
}
p2->next = p2->next->next;
return node->next;
}
#include <iostream> #include "bits/stdc++.h" using namespace std; int main() { int n, k; scanf("%d%d", &n, &k); vector<int> v(n); for (int i = 0; i < n; ++i) { scanf("%d", &v[i]); } if (k > v.size() || v.empty()){ for (int i = 0; i < n; ++i) { if (i != 0) printf(" "); printf("%d", v[i]); } } else{ v.erase(v.begin() + (n - k)); for (int i = 0; i < v.size(); ++i) { if (i != 0) printf(" "); printf("%d", v[i]); } } return 0; }
list_node * remove_last_kth_node(list_node * head, int K) { //////在下面完成代码 list_node *dummynode=new list_node(0); dummynode->next =head; list_node *fast =dummynode; list_node *slow= dummynode; while(K&&fast!=nullptr){ fast =fast->next; K--; } fast =fast->next; while(fast!=nullptr){ slow =slow->next; fast =fast->next; } slow->next =slow->next->next; return dummynode->next; }
list_node * remove_last_kth_node(list_node * head, int K) { list_node* fast = head; list_node* slow = head; //快指针先走K步 while(K--){ fast = fast->next; } //快指针为空,说明是要删除头结点,直接返回 if(fast == nullptr) return head; // 让快慢指针同时前进 while(fast->next != nullptr){ fast = fast->next; slow = slow->next; } //慢指针的下一步就是要删除的节点 list_node* tmp = slow->next; slow->next = slow->next->next; delete tmp; return head; }
#include <stdio.h> #include <stdlib.h> typedef struct node { int val; struct node *next; } Node; Node *newNode(int val); void freeList(Node *head); Node *removeLastK(Node *head, int k); int main(void) { int n, k, val; Node *node, *head = NULL, *cur = NULL; scanf("%d%d", &n, &k); for (int i = 0; i < n; i++) { scanf("%d", &val); node = newNode(val); if (head == NULL) { head = cur = node; continue; } cur->next = node; cur = cur->next; } head = removeLastK(head, k); cur = head; while (cur != NULL) { printf("%d", cur->val); cur = cur->next; if (cur != NULL) printf(" "); } printf("\n"); freeList(head); return 0; } Node *newNode(int val) { Node *node = (Node *) malloc(sizeof(Node)); node->val = val; node->next = NULL; return node; } void freeList(Node *head) { Node *old; while (head != NULL) { old = head; head = head->next; free(old); } } Node *removeLastK(Node *head, int k) { Node *fast = head; Node *slow = head; Node *pre = NULL, *old; for (int i = 0; i < k; i++) { fast = fast->next; } while (fast != NULL) { pre = slow; slow = slow->next; fast = fast->next; } if (pre == NULL) { old = head; head = head->next; } else { old = pre->next; pre->next = pre->next->next; } free(old); return head; }
/* * @Description: 在链表中删除倒数第K个结点 * @Author: * @Date: 2020-11-08 20:07:10 * @LastEditTime: 2020-11-08 20:33:09 * @LastEditors: Please set LastEditors */ #include <iostream> using namespace std; struct list_node { int val; struct list_node *next; }; //链表的节点 int K, n, val; list_node *input_list(void) //读入链表 { list_node *phead = new list_node(); list_node *cur_pnode = phead; scanf("%d %d", &n, &K); for (int i = 1; i <= n; ++i) { scanf("%d", &val); if (i == 1) { cur_pnode->val = val; cur_pnode->next = NULL; } else { list_node *new_pnode = new list_node(); new_pnode->val = val; new_pnode->next = NULL; cur_pnode->next = new_pnode; cur_pnode = new_pnode; } } return phead; } list_node *remove_last_kth_node(list_node *head, int K) { //在下面完成代码 int k = n - K;//倒数第k个结点 list_node *pre = NULL;//前一个结点 list_node *curr = head;//当前结点 for(int i = 0;i < k;i++){ pre = curr; curr = curr->next; } if (pre == NULL) { head = curr->next; delete curr;//删除结点 curr = NULL;//避免称为野指针 }else{ pre->next = curr->next; delete curr; curr = NULL; } return head; } void print_list(list_node *head) { while (head != NULL) { printf("%d ", head->val); head = head->next; } } int main() { list_node *head = input_list(); // 链表的头节点 list_node *rhead = remove_last_kth_node(head, K); print_list(rhead); return 0; }
import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String[] rawInput = br.readLine().trim().split(" "); int n = Integer.parseInt(rawInput[0]); int val = Integer.parseInt(rawInput[1]); if (val > n) { System.out.print(""); br.close(); return; } rawInput = br.readLine().trim().split(" "); // 构建链表节点 Node head = buildLinkedList(rawInput); // 找到倒数第k个节点,并删除 head = findAndDelLastKNode(head, n, val); // 打印输出链表节点的值 StringBuilder sb = new StringBuilder(); while (head != null) { sb . append(head.value) . append(" "); head = head.next; } System.out.print(sb.toString().trim()); br.close(); } private static Node buildLinkedList(String[] elements) { Node head = null; if (0 == elements.length) { return head; } Node curNode = null; for (int i = 0; i < elements.length; i++) { Node node = new Node(Integer.parseInt(elements[i])); if (null == head) { head = node; } else { curNode.next = node; } curNode = node; } return head; } private static Node findAndDelLastKNode(Node head, int n, int val) { if (null == head) { return head; } // 倒数第n个节点特殊处理 if (val == n) { Node node = head; head = head.next; node = null; // 避免对象的游离 return head; } //由于是单链表,要查到倒数第 k + 1节点,以方便后序节点赋值处理 int i = 0; Node curNode = head; // 先查找正数第k + 1个节点 while (i < val + 1) { curNode = curNode.next; i++; } Node lastNode = head; while (curNode != null) { curNode = curNode.next; lastNode = lastNode.next; } Node lastKNode = lastNode.next; lastNode.next = lastKNode.next; lastKNode = null; return head; } } class Node { public int value; public Node next; public Node(int value) { this.value = value; next = null; } }
import java.util.*; import java.io.*; public class Main { //这样为什么还慢,运行时间:3821ms占用内存:160640k public static void main(String [] araa){ Scanner sc = new Scanner(System.in); while (sc.hasNext()) { int n = sc.nextInt(); int m = sc.nextInt(); int i = 0; while(i<n){ int v = sc.nextInt(); //等同正的数第n-m+1个,因位置从0开始,删除的位置就是n-m if(i != n-m) System.out.print(v+" "); i++; } System.out.println(); } } }
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { if(head==null||n==0){ return head; } if(head.next==null&&n==1){ return null; } ListNode pre=new ListNode(-1); pre.next=head; ListNode fast=pre; ListNode slow=pre; while(n-->0){ fast=fast.next; } while(fast!=null&&fast.next!=null){ fast=fast.next; slow=slow.next; } slow.next=slow.next.next; return pre.next; } }