面试题18:删除链表中的节点(JAVA实现)
2018-10-21 16:15
381 查看
题目一:在o(1)时间内删除链表节点
给定单向链表的表头指针和一个节点指针,定义一个函数在o(1)时间内删除节点。
[code]package jianzhi_offer; public class DeleteNodeInList { public static class ListNode{ private int data; private ListNode next; public ListNode(int data,ListNode next) { this.data = data; this.next = next; } } public static void deleteNode(ListNode head,ListNode node) { //1删除尾节点 if(node.next == null) { while(head.next!=node) { head = head.next; } head.next = null; } //2删除的节点是头节点 else if(node == head) { head = null; } //3删除的节点是中间的普通节点 else { node.data = node.next.data; node.next = node.next.next; } } public static void main(String[] args) { // TODO Auto-generated method stub ListNode tail = new ListNode(1,null); ListNode c = new ListNode(2,tail); ListNode b = new ListNode(3,c); ListNode head = new ListNode(4,b); deleteNode(head,c); while(head!=null) { System.out.println(head.data); head = head.next; } } }
题目二:删除链表中重复的节点
在一个排序的链表中,如何删除重复的节点?
[code]package jianzhi_offer; public class DeleteDuplication { public static class ListNode{ private int data; private ListNode next; public ListNode(int data,ListNode next) { this.data = data; this.next = next; } } public static ListNode deleteDuplication(ListNode head) { if(head == null || head.next == null) return head; ListNode preNode = null; ListNode pNode = head; while(pNode!=null) { ListNode pNext = pNode.next; boolean needDelete = false; if(pNext!=null && pNode.data == pNext.data) needDelete = true; if(!needDelete) { preNode = pNode; pNode = pNode.next; } else { int value = pNode.data; ListNode toBeDelete = pNode; while(toBeDelete!=null && toBeDelete.data == value) { pNext = toBeDelete.next; toBeDelete = pNext; } if(preNode == null) head = pNext; else preNode.next = pNext; pNode = pNext; } } return head; } public static void main(String[] args) { // TODO Auto-generated method stub ListNode tail = new ListNode(5,null); ListNode c = new ListNode(4,tail); ListNode b = new ListNode(4,c); ListNode a = new ListNode(3,b); ListNode e = new ListNode(3,a); ListNode d = new ListNode(2,e); ListNode head = new ListNode(1,d); deleteDuplication(head); while(head!=null) { System.out.println(head.data + " "); head = head.next; } } }
阅读更多
相关文章推荐
- 剑指Offer 面试题18:删除链表节点 Java代码实现
- 剑指offer面试题18:删除链表中重复的节点-java
- 剑指offer编程题Java实现——面试题13在O(1)时间内删除链表节点
- 剑指offer面试题18:删除链表的节点-java
- Java实现-删除链表中倒数第n个节点
- 【剑指offer】面试题18:删除链表中重复的节点
- java实现单链表(增加节点,删除节点,根据下标获取节点,获取链表大小,链表逆序)
- 剑指Offer面试题18:删除链表的节点
- 单链表的java语言完整实现含添加删除节点
- 剑指offer--面试题13:在O(1)时间删除链表结点--Java实现
- 剑指Offer面试题56:链表中环的入口节点 Java实现
- 在O(1)时间删除链表节点(Java实现)
- 在带头节点的单链表中,删除所有值为x的节点(Java实现)
- 剑指Offer面试题18-2:删除链表重复的节点
- 剑指Offer 面试题23:链表中环的入口节点 Java代码实现
- 剑指Offer 面试题22:链表中倒数第k个节点 Java代码实现
- java实现单链表(增加节点,删除节点,根据下标获取节点,获取链表大小,链表逆序)
- 删除链表中重复的节点(Java实现)
- 剑指Offer面试题13(java版):在O(1)时间删除链表节点
- java实现创建链表以及插入节点,查找结点,删除节点等操作