定义并创建链表:
#include <iostream>
using namespace std;
#include <assert.h>
typedef struct ListNode
{
int _data;
struct ListNode* _next;
ListNode(int data)
:_data(data)
,_next(NULL)
{}
}ListNode;
void Push(ListNode** list,int x)
{
assert(list);
ListNode* tmp = new ListNode(x);
if (*list == NULL)
{
*list = tmp;
}
else
{
ListNode* cur = *list;
while (cur->_next)
{
cur = cur->_next;
}
cur->_next = tmp;
}
}
逆置单链表:
ListNode* ListReverse(ListNode* list)
{
if (list==NULL || list->_next==NULL)
{
return list;
}
ListNode* cur = list;
ListNode* prev = NULL;
ListNode* tmp = NULL;
while (cur)
{
tmp = cur;
cur = cur->_next;
tmp->_next = prev;
prev = tmp;
}
return prev;
}
求倒数第k个结点:
ListNode* FindKNode(ListNode* list,int k)
{
if (list==NULL || k==0) //空链表或给的值不合法
{
return NULL;
}
ListNode* fast = list;
ListNode* slow = list;
for (int i=0; i<k; ++i)
{
if (fast->_next != NULL)
{
fast = fast->_next;
}
else //给的数值超过范围
{
return NULL;
}
}
while (fast)
{
fast = fast->_next;
slow = slow->_next;
}
return slow;
}
实现一个Add函数,让两个数相加,但是不能使用+、-、*、/等四则运算符。ps:也不能用++、--等等:
int Add(int a,int b)
{
do
{
int sum1 = a^b;
int sum2 = (a&b)<<1;
a = sum1;
b = sum2;
} while (b);
return a;
}