一些链表题目的 java 解答(2)
13.删除链表中重复的结点
题目描述:
在一个已排序的链表中,如何删除重复的结点?
重复的结点不保留,返回链表头指针。
例如,链表 :1->2->3->3->4->4->5 ,处理后为: 1->2->5
解答:
|
|
14.复杂链表的复制
问题描述:
实现复杂链表的复制。在复杂链表中,每个结点除了有一个 next 指针指向下一个结点外,还有一个 Sibling 指向链表中的任意结点或者 null。
思路:
- 根据原始链表的每个结点 N,创建对应的 N’。把 N’ 链接在 N 后面;
- 设置复制出来的结点的 Sibling;
- 将第二步的链表拆分成原始链表和复制出来的链表。
代码:
|
|
15.在 O(1) 时间内删除链表结点
问题描述:
给定单向链表的头指针和一个结点指针,定义一个函数在 O(1) 时间内删除该结点。
思路:
- 要删除结点 i,把 i 的下一个结点 j 的内容复制到 i;
- 把 i 的指针指向结点 j 的下一个结点;
- 删除结点 j。其效果刚好是 i 被删除了。
- 问题:
- 如果待删除的是链表尾结点,它没有下一个结点。
- 注意链表中只有一个结点,要删除头结点/尾结点,返回 null。
代码:
|
|