给定一个整数值和一个指向链表头的指针,如何从列表中删除所有大于指定值的节点?从链表中删除大于指定值的节点
例如
列表:10-> 34-> 11-> 19-> 26-> 55-> 17 值:19 输出:10-> 11-> 17(所有大于19的节点需要移除)
(边缘的情况下)
列表:10-> 3-> 17-> 5-> 2-> 14-> 7 值:9 输出:3-> 5-> 2-> 7(所有节点大于9需要删除)
我不是在寻找确切的代码,只是一个算法来解决这个问题!
给定一个整数值和一个指向链表头的指针,如何从列表中删除所有大于指定值的节点?从链表中删除大于指定值的节点
例如
列表:10-> 34-> 11-> 19-> 26-> 55-> 17 值:19 输出:10-> 11-> 17(所有大于19的节点需要移除)
(边缘的情况下)
列表:10-> 3-> 17-> 5-> 2-> 14-> 7 值:9 输出:3-> 5-> 2-> 7(所有节点大于9需要删除)
我不是在寻找确切的代码,只是一个算法来解决这个问题!
第一分配临时节点到起始节点
然后,你必须三种情况链表 ..
如果在第一位置所需的节点,然后作出启动等于start->next
和删除临时节点
如果它在中间,则使另一个节点在temp之前立即停止,并使该节点的下一个等于下一个temp,然后如果它处于最后位置,则使其之前的节点的下一个成为等于nullptr
就是这样。
private static Node removeNodes(Node start, int x) {
if(start == null) return start;
if(start.data > x && start.next == null) return null;
//find first head node
Node cur = start;
Node prev = null;
//4,5,3,2,1,6 --- where x = 2
while(cur != null && cur.data > x) {
prev = cur;
cur = cur.next;
}
if(prev != null) prev.next = null;
Node newHead = cur;
while(cur.next != null) {
if(cur.next.data > x) {
cur.next = cur.next.next;
} else {
cur = cur.next;
}
}
return newHead;
}
'std :: list :: remove_if' http://en.cppreference.com/ W/CPP /容器/列表/删除 –
我不需要stl实现...但我正在寻找一种算法来实现它自己! –
请解释你为什么不使用'std :: list'?如果这是一项任务,那么请显示您迄今尝试的内容。 –