一.首先,看看单链表中第i个元素的删除: Status ListDelete_L (LinkList &L,int i,ElemType &e){ //在带头结点的单链表L中,删除第i个元素,并由e返回其值 p=L;j=0; while(p->next&&j<i-1){                     //寻找第i个结点,并令p指向其前驱 p=p->next; ++j; } if(!(p->next)||j<i-1)return ERR…
该逻辑对于删除第一个元素不适用. 这样的代码不优美 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* removeElements(ListNode* head, int val) { while(h…
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list. For example,Given1->2->3->3->4->4->5, return1->2->5.Given1->1->1->2->3, return2->3. 这题和R…
题目: 分别实现两个函数,一个可以删除单链表中倒数第K个节点,另一个可以删除双链表中倒数第K个节点. 要求: 如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1). 解答: 让链表从头走到尾,每移动一步,就让K值减一, 示例: 第一种情况: 链表走到结尾时,如果K值大于0,说明不用调整链表,因为链表根本没有倒数第K个节点,此时将原链表直接返回即可: 第二种情况: 链表走到结尾时,如果K值等于0,说明链表倒数第K个节点就是头结点,此时直接返回head.next,相当于删除了头结点.…
/** * Link节点 有数据项和next指向下一个Link引用 */ class Link { private int iData;// 数据 private double dData;// 数据 public Link next;// 下一个link节点的引用 public int getiData() { return iData; } public Link(int i, double d) { iData = i; dData = d; } public String toStrin…
1 题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 2 思路和方法 (1)链表为空,return NULL: (2)头结点存在重复(22345),删除头结点,另选新的结点作为头结点.处理这种特殊情况,多申请一个指针就可以了. 3 C++核心代码 /* struct ListNode { int val; struct Lis…
[题目]分别实现两个函数,一个可以删除单链表中倒数第K个节点,另一个可以删除双链表中倒数第K个节点.[要求]如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1).[题解]从头遍历链表,每移动一次,K--,直至移动到链表尾部,此时k>0,说明k太大,链表不用删除k==0,链表长度即是k, 删除头结点即可k<0,再次重头遍历链表,每移动一次,k++,当k==0时,此时结点为要删除结点的前结点,使其指向下一个结点即可双向链表一样,只不过需要注意前结点就好 #include <i…
// 面试题18(二):删除链表中重复的结点 // 题目:在一个排序的链表中,如何删除重复的结点?例如,在图3.4(a)中重复 // 结点被删除之后,链表如图3.4(b)所示. #include <iostream> #include "List.h" using namespace std; void DeleteDuplication(ListNode** pHead)//注意有可能删除头结点,所以是** { if (pHead == nullptr || *pHead…
题目 在单链表和双链表中删除倒数第K个节点 java代码 /** * @Description:在单链表和双链表中删除倒数第K个节点 * @Author: lizhouwei * @CreateDate: 2018/4/6 9:14 * @Modify by: * @ModifyDate: */ public class Chapter2_2 { public Node removeKNode(Node head, int k) { if (head == null || k < 1) { re…
题目描述: 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 解题思路: 首先初始化一个起始指针preNode指向头结点.工作指针walkNode指向链表的第一个元素,即preNode.next=walkNode. 迭代开始: while(walkNode!=null){ 如果当前工作结点的数据域walkNode.val与下一个结点的数…