目录
题目:
思路:
贴代码:
代码输出
题目:
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,最后返回链表头指针。
如:
链表1->2->3->3->4->4->5
输出为 1->2->5
思路:
定义辅助指针:p pre q和resHead。初始时 p和pre都指向链表头指针。
resHead初始化为值为-1。(头结点前的一个结点)
接下来依次遍历链表。p始终指向当前遍历到的结点。
A 如果p和p的下一个结点值相等 => 向后遍历。p = p -> next
否则
B 如果p的下一个结点存在 判断pre和p是否相等。 (同一个结点)
相等 => 说明指向的这个结点不是重复 将p链接到q。
C p的下一个结点不存在 说明已经遍历到最后一个结点。 指向B中相同的判断。
最后 将链表的最后一个结点置空。
贴代码:
#include<iostream>
#include<math.h>
#include<vector>
using namespace std;void reOrderArray(vector<int>& array) {vector<int> b = array;//复制动态数组int i = 0;int j;for (j = 0; j < array.size(); j++)if (array[j] % 2 == 1){b[i] = array[j];i++;}for (j = 0; j < array.size(); j++)if (array[j] % 2 == 0){b[i] = array[j];i++;}//使array为变换后的数组array = b;}
int main()
{int a[6] = { 1,2,3,4,5,6 };vector<int> b;// 向b中输入值for (int i = 0; i <= 5; i++)b.push_back(a[i]);//转换reOrderArray(b);//输入b数组的值for (int j = 0; j <= b.size() - 1; j++)cout << b[j] << " ";return 0;
}