LeetCode 1721. Swapping Nodes in a Linked List
作者:互联网
原题链接在这里:https://leetcode.com/problems/swapping-nodes-in-a-linked-list/
题目:
You are given the head
of a linked list, and an integer k
.
Return the head of the linked list after swapping the values of the kth
node from the beginning and the kth
node from the end (the list is 1-indexed).
Example 1:
Input: head = [1,2,3,4,5], k = 2 Output: [1,4,3,2,5]
Example 2:
Input: head = [7,9,6,6,7,8,3,0,9,5], k = 5 Output: [7,9,6,6,8,7,3,0,9,5]
Constraints:
- The number of nodes in the list is
n
. 1 <= k <= n <= 105
0 <= Node.val <= 100
题解:
Move the runner k times, and have a mark. This is the kth node from the beginning.
Now move both walker and runner until runner == null. Now walker is the kth ndoe from the end.
Note: check k is larger than list length.
Time Complexity: O(n). n is the length of list.
Space: O(1).
AC Java:
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode() {} 7 * ListNode(int val) { this.val = val; } 8 * ListNode(int val, ListNode next) { this.val = val; this.next = next; } 9 * } 10 */ 11 class Solution { 12 public ListNode swapNodes(ListNode head, int k) { 13 if(head == null){ 14 return head; 15 } 16 17 ListNode dummy = new ListNode(-1); 18 dummy.next = head; 19 ListNode runner = dummy; 20 ListNode walker = dummy; 21 while(runner.next != null && k > 0){ 22 runner = runner.next; 23 k--; 24 } 25 26 if(k > 0){ 27 return head; 28 } 29 30 ListNode mark = runner; 31 while(runner != null){ 32 runner = runner.next; 33 walker = walker.next; 34 } 35 36 int temp = walker.val; 37 walker.val = mark.val; 38 mark.val = temp; 39 return dummy.next; 40 } 41 }
类似Remove Nth Node From End of List.
标签:head,ListNode,Swapping,val,runner,list,List,next,LeetCode 来源: https://www.cnblogs.com/Dylan-Java-NYC/p/16380564.html