题目地址:
https://www.lintcode.com/problem/linked-list-simplification/description
简化一个单链表,简化方式是保留头尾,中间的节点个数 n n n作为字符串填在中间,但每一位要分成若干个节点分别表示。可以先数一下有多少个节点,再做简化。代码如下:
public class Solution {
/**
* @param head: the linked list to be simplify.
* @return: return the linked list after simplifiction.
*/
public ListNode simplify(ListNode head) {
// write your code here
int count = 0;
ListNode last = null, cur = head;
while (cur != null) {
count++;
if (cur.next == null) {
last = cur;
}
cur = cur.next;
}
String num = String.valueOf(count - 2);
cur = head;
for (int i = 0; i < num.length(); i++) {
cur.next = new ListNode((int) num.charAt(i));
cur = cur.next;
}
cur.next = last;
return head;
}
}
class ListNode {
int val;
ListNode next;
public ListNode(int val) {
this.val = val;
}
}
时间复杂度 O ( n ) O(n) O(n),空间 O ( 1 ) O(1) O(1)。